2012-02-04 29 views
2

我正在处理大量的货币价值。每个值仅精确到2位小数点。但是这些值将通过数据库和一个或多个web框架传递,并且会有arithemetic操作。现代浮点实现能够处理精确单位(如金钱)吗?

我是否应该坚持小数数据类型的数字,只需要2个地方的精度?或者现代浮点实现是否健壮和标准化以避免它?

+0

现代是多么“现代”? – BoltClock 2012-02-04 17:19:02

+0

当前版本的数据库和编程语言。我在C大学学习(C++和Java)。 – aitchnyu 2012-02-04 18:12:43

+0

http://www.panix.com/~arnow/brooklyn_college/diatribe.html – Moshe 2013-08-29 16:10:42

回答

8

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

浮点数字,特别是二进制数字,是从不定点数量的正确选择,至少所有那些期望精确分数的数据,如货币值。首先,他们不准确地表示分数(或任何分数分量)的所有值,就像固定长度的十进制数不能正确表示1/3一样。其次,由于“重要性”的差异,增加或减少小的和非常大的浮点数并不总是产生你期望的结果。

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

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