我必须在我的应用程序中进行计算,我有像这样的模型:
result = Capital * rate / (1- 1/(1+ rate)^frequence)
我在互联网上读过,用浮点数进行计算可能是无损的。
我应该在我的情况下使用NSDecimalNumber吗?
答案 0 :(得分:1)
包括NSDecimalNumber
在内的所有数字都只有特定的准确性。
浮点数和双打数是数字的二进制表示,它们分别代表23和52个二进制数字(大约7和16个十进制数字)。
这意味着某些数字无法准确表示。例如,考虑1 / 3
- 要精确表示,您需要无限数量的数字(0.333333333333...
)。
在大多数情况下,16位十进制数字绰绰有余,尤其是当计算结果不必绝对准确时。精度也会受到计算顺序的影响。
NSDecimalNumber
最多可容纳30个十进制数字(它不能代表二进制数字),因此它可以比Double更准确地保存数字。但是,NSDecimalNumber
的计算不是在CPU上本地完成的,而且速度要慢得多。如果需要速度,这不是你想要做的事情。我们主要使用NSDecimalNumber
进行货币计算,因为我们需要高精度(特别是我们希望在转换为二进制和后退时避免精度损失)。