0

我似乎无法得到一个四舍五入到最接近的百分之一的好数字(即 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

4

3 回答 3

2

Javascript 数字是浮点数。不应依赖它们进行精确的十进制运算。

例如,您可以将其输入到 js 控制台

.1 + .2 //0.30000000000000004

一般来说,你可以准确地计算整数数学,如果你需要更多地控制小数的准确性,你可以查看像这样的库,它可以让你设置数字的错误范围,或者调用用一种语言编写的外部库更好地处理数字类型。

更多用于准确 JS 十进制数学的库:

于 2013-05-11T00:42:43.010 回答
1

尝试将数字隔离到百分之一。IE[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);

我们所做的只是删除小数点后的所有内容。为了做到这一点,我们需要找到小数位,这样我们就可以找到每百个十进制值。首先我们必须将数字转换为字符串,+ ''或者您可以使用该toString()函数。然后我们indexOf('.')用来找到小数位,最后我们数了三位。这将使您的数字达到百分之一,没有长十进制值。

示例:
输入:12.57000000008输出:12.57
输入:15.20000000008输出:15.20

工作小提琴。

于 2013-05-11T01:56:02.930 回答
1

如果只需要支持现代浏览器,该toFixed方法是最佳选择。它接受一个表示要四舍五入的小数位数的参数并返回一个String.

example.dollars.toFixed(2); // returns "12.57"
于 2013-05-11T07:04:24.517 回答