2013-10-14 3 views
2

У меня есть очень странный результат выхода из ToString(), построенной в функцииJavascript ToString() странное поведение

Вот мой код:

function strangeFunction(num) 
{ 
return num.toString(); 
} 


alert(strangeFunction(121.112*100)); //output: 12111.199999999999 
alert(strangeFunction(.1*100)); //output: 10 
alert(strangeFunction(1.33*100)); //output: 133 
alert(strangeFunction(133.33*100)); //output: 13333.000000000002 
alert(strangeFunction(133.33*100));//output: 13334 

http://jsfiddle.net/sVMf4/

Любые предложения, как это исправить вопрос? Похоже, что это какая-то ошибка или форматирование номера.

ответ

1

Это не только JavaScript, практически каждый язык манипулирования floating point значение имеют эту проблему.

Чтобы избежать этого, вы можете использовать Math.round() или .toFixed().

Math.round(123.456); 
// returns 123 

123.4.toFixed(2); 
// returns "123.40" 

Существует также .toPrecision(), но он может принять решение использовать научные обозначения (например, 1.2e+2), который часто не хотел.

0

Вы можете попробовать это:

function numToStr(var number, var dec) { 
    return number.toFixed(dec); 
} 

var number = 121.112*100; 

alert(numToStr(number , 0)); 

Выход:

12111 

toFixed() позволяет вам преобразовать число в строку, сохраняя заданное количество знаков после запятой.

0

Его из-за того, что числа с плавающей запятой сохраняются внутри страны. Вы можете попробовать это, если уверены в точности, которую хотите.

function strangeFunction(num) 
{ 
    return parseFloat(num.toPrecision(12)).toString(); 
} 
Смежные вопросы