Language agnostic 现代浮点实现是否能很好地处理精确单位(如货币)?

Language agnostic 现代浮点实现是否能很好地处理精确单位(如货币)?,language-agnostic,floating-point,Language Agnostic,Floating Point,我对处理大量的货币价值非常具体。每个值仅精确到小数点后2位。但是这些值将由数据库和一个或多个web框架传递,并且会有算术运算 对于只需要2位精度的数字,我应该坚持使用十进制数据类型吗?或者现代浮点实现是否健壮且标准化以避免这种情况?不,它们不够精确。有关详细信息,请参阅。绝对不是,问题是正交的,按顺序排列。:-) 浮点数,尤其是二进制浮点数,永远不会是定点数量的正确选择,尤其是那些期望精确分数的数字,如货币值。首先,它们不能准确地表示美分(或任何分数成分)的所有值,就像固定长度的十进制数字不能正

我对处理大量的货币价值非常具体。每个值仅精确到小数点后2位。但是这些值将由数据库和一个或多个web框架传递,并且会有算术运算


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

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

绝对不是,问题是正交的,按顺序排列。:-)

浮点数,尤其是二进制浮点数,永远不会是定点数量的正确选择,尤其是那些期望精确分数的数字,如货币值。首先,它们不能准确地表示美分(或任何分数成分)的所有值,就像固定长度的十进制数字不能正确地表示
1/3
。其次,由于“重要性”的差异,对小浮点数和非常大的浮点数进行加减并不总是产生您期望的结果

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


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

数据库和编程语言的当前版本。我在大学里学的是C(C++和java)。