使用 NSDecimalNumber 或 Float 进行计算

Doing calculation with NSDecimalNumber or Float

我必须在我的应用程序中进行计算,我有这样的公式:

result = Capital * rate / (1- 1/(1+ rate)^frequence)

我在网上看到用浮点数做计算是无损的。

我应该在我的情况下使用 NSDecimalNumber 吗?

包括 NSDecimalNumber 在内的所有数字都只有特定的准确度。 Floats 和 Doubles 是数字的二进制表示,它们分别可以表示 23 位和 52 位二进制数字(大约 7 位和 16 位十进制数字)。

这意味着有些数字无法精确表示。例如,考虑 1 / 3 - 要精确表示,您需要无限数量的数字 (0.333333333333...)。

在大多数情况下,16 位十进制数字就足够了,尤其是当计算结果不必绝对准确时。精度也会受到计算顺序的影响。

NSDecimalNumber 最多可以容纳大约 30 位十进制数字(它不表示二进制数字),因此它可以比 Double 更精确地容纳数字。但是,NSDecimalNumber 的计算并不是在 CPU 上本地完成的,而且速度要慢得多。如果需要速度,这不是您想要做的事情。我们使用 NSDecimalNumber 主要用于货币计算,因为我们在那里需要高精度(特别是我们希望避免在转换为二进制时精度损失)。