2016-07-29 75 views
1

可能这个问题已经存在,但找不到我的具体问题。Python/Javascript数字精度

我有两个数字,我想补充,我不想使用round()函数,因为我正在用钱工作。

1.70 + 1.44 = 3.14 //Returns 3.1399999999999997 
1.70 + 1.45 = 3.15 //Returns the correct answer 
1.70 + 1.37 = 3.07 //Returns 3.0700000000000003 

我在Javascript中试过了,但仍然是同样的问题。

+0

简单的解决方案:通过转换为例如美元到美分来进行整数计算。 – Sirko

+1

[This](http://floating-point-gui.de/)网站可以解释问题出现的原因以及如何解决问题。 – Aurora0001

回答

1

由于您使用的是金钱,所以请始终使用Python中的decimal.Decimal类。

+0

是的。我是这样做的,而不是在前端计算它。 – aldesabido

0

使用parseFloat精密:

parseFloat(number).toFixed(precision); 

例如

parseFloat(1.70 + 1.37).toFixed(2); // RETURN 3.07 
0

您可以实现此目的的一种方法是将值乘以所需(10 *精度),然后将结果除以(10 *精度)。

  • ((1.70 * 100)+(1.37 * 100))/ 100 = 3.07
  • ((1.70 * 100)+(1.45 * 100))/ 100 = 3.15
  • ((1.70 * 100)+(1.44 * 100))/ 100 = 3.14

您可以添加一个方法来做到这一点,以保持简单。