现代浮点实现能够很好​​地处理精确单位(如钱)吗?

时间:2012-02-04 17:12:11

标签: language-agnostic floating-point

我特别关注处理大量金钱价值。每个值仅精确到 2个小数位。但是这些值将由数据库和一个或多个Web框架传递,并且将进行arithemetic操作。

对于只需要2位精度的数字,我是否应该坚持使用十进制数据类型?或者现代浮点实现是否健壮且标准化以避免它?

2 个答案:

答案 0 :(得分:8)

绝对没有,这个问题是正交的,按顺序排列。 : - )

浮点数,特别是二进制数,对于定点数量来说,永远是正确的选择,最不重要的是那些期望精确分数的货币数量,例如货币价值。首先,它们不能准确地表达所有美分值(或任何小数分量),就像固定长度的十进制数不能正确表达1/3一样。其次,由于“重要性”的差异,加上或减去小的和非常大的浮点数并不总能产生预期的结果。

十进制数字是进行货币计算的方法。如果绝对必须使用二进制数,请使用缩放的定点二进制数 - 例如,以货币单位的1/100计算所有内容,并使用二进制整数来执行此操作。

最后,这与“健壮性”或“标准化”无关 - 它与选择与您的数据匹配的数据类型有关。

答案 1 :(得分:1)

不,它们不够精确。有关详细信息,请参阅the floating point guide