Javascript(node.js)Math.floor返回长十进制值

时间:2013-05-11 00:32:55

标签: javascript node.js

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

3 个答案:

答案 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

Working fiddle.

答案 2 :(得分:1)

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

example.dollars.toFixed(2); // returns "12.57"