Javascript toString()奇怪的行为

时间:2013-10-14 11:09:16

标签: javascript tostring number-formatting

我在函数

中构建的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/

有关如何解决该问题的任何建议吗?似乎这是一种错误或数字格式问题。

4 个答案:

答案 0 :(得分:1)

它不仅仅是JavaScript,几乎每个操纵floating point值的语言都有这个问题。

为避免这种情况,您可以使用Math.round().toFixed()

Math.round(123.456);
// returns 123

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

还有.toPrecision()但它可能决定使用通常不需要的科学记数法(如1.2e+2)。

答案 1 :(得分:0)

你可以试试这个:

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

var number = 121.112*100;

alert(numToStr(number , 0));  

输出:

12111

toFixed()可让您将数字转换为字符串,并保留指定的小数位数。

答案 2 :(得分:0)

这似乎是一个旧的JavaScript问题:

How to deal with floating point number precision in JavaScript?

另一种可能的解决方案:

function strangeFunction(num)
{
    num = Math.round(num); 
    return num.toString();
}

答案 3 :(得分:0)

因为浮点数在内部保存的方式。 如果您确定所需的精度,可以试试这个。

function strangeFunction(num)
{
    return parseFloat(num.toPrecision(12)).toString();
}