Floating point 如何圆化微秒?

Floating point 如何圆化微秒?,floating-point,precision,currency,floating-accuracy,Floating Point,Precision,Currency,Floating Accuracy,在JavaScript、Python和其他语言中,如果将值舍入到37.305到小数点后2位,则会得到错误的值: Number(37.305).toFixed(2) => 37.30 // Should be 37.31 表示货币时精度问题的一个解决方案是使用。也就是说,1.00美元=>1000000微米 我的问题是:如何将37.305美元(以37305000微秒为单位)的数值舍入到小数点后2位,结果应为37.31?要将以R微秒为单位的数值舍入到小数点后n位,请执行以下操作: 让我是106

在JavaScript、Python和其他语言中,如果将值舍入到37.305到小数点后2位,则会得到错误的值:

Number(37.305).toFixed(2) => 37.30 // Should be 37.31
表示货币时精度问题的一个解决方案是使用。也就是说,1.00美元=>1000000微米


我的问题是:如何将37.305美元(以37305000微秒为单位)的数值舍入到小数点后2位,结果应为37.31?

要将以R微秒为单位的数值舍入到小数点后n位,请执行以下操作:

让我是106−N这将为我们提供位置值,其中我们四舍五入小数点后n位。 设r是模m的r的余数。例如,将37305000微秒四舍五入到小数点后两位时,m为10000,r为5000。 根据问题中未说明的所需舍入规则,设s为0或m。例如,对于四舍五入到最近值,如果rm/2,则设m为四舍五入。如果r=m/2,则使用所需规则断开连接。这可能是向上取整、向下取整或根据m的下一个较高数字进行取整。例如,如果规则是将关系四舍五入为偶数,则检查截断为整数的R/m的最后一位。如果是偶数,则将s设置为0。如果是奇数,则将s设置为m。 期望的四舍五入结果是R−r+s。
对于非负数R,上述内容已足够。为了支持负数,可能需要进行调整以选择余数并应用舍入规则选择s。这些操作相当简单,但取决于所用编程语言中方便的余数或余数操作以及需要的舍入规则。

为什么您认为将37.305舍入到37.30是错误的?如果您使用的是舍入到偶数或舍入,那么这是正确的做法。有更多的方法来取整.x5,而不是小学的规则总是取整一半。那么取整应该是一致的。编号37.305001.toFixed2=>37.31。如果你有$1000/7=>142.857143,你会想要四舍五入到$142.86。至少,如果我欠银行的钱是这样的话,我的银行会向我收费=有一些库可以处理精确的十进制计算,而不是基于浮点数;你的目标是哪种语言?@rodrigo silveira:你可能想读一读。@Benjamin 37.305四舍五入到2等于37.30的确切情况可以在JavaScript、Python 2、Python 3中看到。PHP7将其四舍五入到37.31。