Javascript 加法给我一个多于 2 位小数的输出

标签 javascript mysql

我有一个对象,它在 mySql 上有一个数据类型为 Decimal(10,2) 的 money 属性。

我的 javascript 发出一个 http 请求来检索这些值,我在我的 javascript 函数中处理数据以将所有值加到一个 $scope 中:

 $scope.expected = 0;
 for(var k = 0; k < collection.length; k++)
    {
        $scope.expected += Number(collection[k].price);
    }

price 是包含 125.89 作为来自数据库的值的货币值。迭代进行了 31 次迭代,因为 collection.length 返回我 31

我使用了 Number 引用,因为它开始时是一个字符串。

当循环结束时,我得到这个总和:3902.589999999999 但我想要的只是 3902.58,因为这是钱,它必须是一个精确的表示。我四处研究,社区似乎同意使用 toFixed(2) 但据我了解,toFixed(2) 将数字四舍五入,这是我不想做的事情因为这个操作涉及现金。

有没有办法保留小数点后两位而不四舍五入?

我还在整个循环中保留了 console.log 的日志。这是结果:

125.89
251.78
377.67
503.56
629.45
755.34
881.23
1007.12
1133.01
1258.9
1384.7900000000002
1510.6800000000003
1636.5700000000004
1762.4600000000005
1888.3500000000006
2014.2400000000007
2140.1300000000006
2266.0200000000004
2391.9100000000003
2517.8
2643.69
2769.58
2895.47
3021.3599999999997
3147.2499999999995
3273.1399999999994
3399.0299999999993
3524.919999999999
3650.809999999999
3776.699999999999
3902.589999999999

最佳答案

从您的帖子看来,您正在处理正数。

如果你想 chop 最终结果,你可以像这样调用 Math.floor 来实现

$scope.expected = Math.floor($scope.expected * 100)/100;

但是,如果你想在求和之前将每个数字 chop 到小数点后两位,那么你可以使用以下内容

$scope.expected = 0;
 for(var k = 0; k < collection.length; k++)
    {
        $scope.expected += Math.floor(Number(collection[k].price) * 100) / 100;
    }

请注意,这仅在所有数字均为正数(大于或等于零)时才有效。

如果你期望负数,你可以设计一个函数如下:

truncateNumber = function (number) {
    if(number < 0){
       return Math.ceil(number * 100) / 100;
    }else{
       return Math.floor(number * 100) / 100;
    }   
};

例子

使用其中之一

 $scope.expected = truncateNumber($scope.expected);

  for(var k = 0; k < collection.length; k++)
   {
        $scope.expected += truncateNumber(Number(collection[k].price));
   }

关于Javascript 加法给我一个多于 2 位小数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27223938/

相关文章:

while 循环外的 PHP count 变量不增加

mysql - 'NoneType' 对象没有属性 'cursor'

mysql - SubSonic 不生成 MySql 外键表

带有默认时间戳列值的 mysql LOAD DATA LOCAL INFILE

MySQL触发器: Before Insert or After Insert

javascript - 在 Javascript 中编辑对象的值

javascript - 如何在倒数计时器为零时更改 jquery 中的类

javascript 删除 json 包含字符串而不是 equals 的地方

javascript - 跟踪传入您网站的重定向

javascript - 如何使用 setInterval 函数显示屏幕上出现的每个值之间间隔 500 毫秒的阶乘计算?