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

Jes*_*ose 2 language-agnostic floating-point

我正在具体处理大量的金钱价值.每个值都精确到最多2位小数.但是这些值将由数据库和一个或多个Web框架传递,并且将进行arithemetic操作.

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

Ros*_*son 8

绝对没有,问题是正确的,按顺序排列.:-)

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

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

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