我似乎无法得到一个很好的数字四舍五入到最接近的百分之一(即12.57而不是12.57000000008)。
var example = {
user : "John",
dollars: 12.57
};
setInterval( function() {
example.dollars += (parseInt(Math.floor(Math.random()*2000 + 500)) / 100);
console.log(example.dollars);
}, 1000);
我不断得到如下价值:
15.20000000008
88.54000000007
86.36000000008
我在数学函数中设置错误了吗?
注意:这是在node.js
中答案 0 :(得分:2)
Javascript编号是浮点数。不应该依赖它们来进行精确的十进制运算。
例如,您可以将其输入js控制台
.1 + .2 //0.30000000000000004
一般来说,你可以准确地依靠整数数学,如果你需要更多的十进制精度控制,你可以查看像this one这样的库,它可以让你设置数字的误差范围,或者调用外部数字。用更好地处理数字类型的语言编写的库。
更多精确JS十进制数学库:
答案 1 :(得分:1)
尝试将数字隔离到第100位。即[86.36]000000008
var example = {
user : "John",
dollars: 12.57
};
setInterval(function() {
var s, final;
example.dollars += (parseInt(Math.floor(Math.random() * 2000 + 500)) / 100);
s = example.dollars + .005 + '',
final = s.substring(0, s.indexOf('.') + 3);
console.log(final);
}, 1000);
我们所做的只是删除小数百位后的所有内容。为了做到这一点,我们需要找到小数位,这样我们就可以找到每个数字的第100个十进制值。首先,我们必须将数字转换为字符串+ ''
,或者您可以使用toString()
函数。然后我们使用indexOf('.')
来查找小数位置,最后我们计算三个位置。这将得到数字到第100位,没有长十进制值。
示例:
输入:12.57000000008
输出:12.57
输入:15.20000000008
输出:15.20
答案 2 :(得分:1)
如果您只需要支持现代浏览器,toFixed
方法是最佳选择。它需要一个参数来表示要舍入的小数位数,并返回String
。
example.dollars.toFixed(2); // returns "12.57"