我在函数
中构建的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
有关如何解决该问题的任何建议吗?似乎这是一种错误或数字格式问题。
答案 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();
}