2

我有一个来自 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

4 回答 4

1

不仅仅是 JavaScript,几乎所有处理浮点值的语言都有这个问题。

为避免它,您可以使用Math.round()or .toFixed()

Math.round(123.456);
// returns 123

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

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

于 2013-10-14T11:21:25.097 回答
0

你可以试试这个:

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

var number = 121.112*100;

alert(numToStr(number , 0));  

输出:

12111

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

于 2013-10-14T11:15:45.760 回答
0

看来这是一个旧的javascript问题:

如何处理 JavaScript 中的浮点数精度?

另一种可能的解决方案:

function strangeFunction(num)
{
    num = Math.round(num); 
    return num.toString();
}
于 2013-10-14T11:16:52.790 回答
0

这是因为浮点数在内部保存的方式。如果你确定你想要的精度,你可以试试这个。

function strangeFunction(num)
{
    return parseFloat(num.toPrecision(12)).toString();
}
于 2013-10-14T11:21:52.927 回答