对于简单的用途,例如跟踪 65.1kg 等重量值,使用 NSDecimal/NSDecimalNumber 比使用 double 有什么好处吗?
我的理解是,在这种情况下,双精度(甚至浮点)提供了足够的精度。如果我错了,请纠正我。
首先,阅读乔什卡斯韦尔的链接。当与金钱打交道时,这一点尤其重要。就您而言,这可能重要也可能不重要,具体取决于您的目标。如果您输入 65.1 并且想要准确返回 65.1,那么您肯定需要使用正确舍入为十进制值的格式,例如NSDecimalNumber
。如果当您输入 65.1 时,您想要“一个在 65.1 的小误差范围内的值”,那么 float 或 double 都可以(取决于您愿意接受多少误差)。
65.1 是一个很好的例子,因为它说明了问题。这里使用 Swift,因为它很容易演示,但 ObjC 是一样的:
1> 65.1
$R0: Double = 65.099999999999994
2>
1/10 恰好是二进制中的循环小数,就像 1/3 是十进制中的循环小数一样。因此,编码为双精度的 65.1“接近”65.1,但并不精确。如果您需要十进制编码数字的精确表示(即大多数人所期望的),请使用NSDecimalNumber
。这并不是说NSDecimalNumber
比 double 更准确。它只是施加了与 double 不同的舍入误差。您喜欢哪种舍入误差取决于您的用例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)