【发布时间】:2018-08-30 14:01:46
【问题描述】:
XCode 9.4.1。在调试器控制台中,我看到对我来说似乎很奇怪的结果:
(lldb) print (double)0.07
(double) $0 = 0.070000000000000007
(lldb) print [(NSDecimalNumber*)[NSDecimalNumber decimalNumberWithString:@"0.07"] doubleValue]
(double) $1 = 0.069999999999999993
如果在编译代码中执行,我看到的结果相同。我不明白为什么将文字 0.07 转换为双精度以及将十进制 0.07 转换为双精度时结果不同。为什么精度损失不同?
我错过了什么?
【问题讨论】:
-
在纸上你有无限的精度,但在计算机计算中它的精度是有限的。去研究数值方法。
-
您只有来自不同来源的 double 值,它们自己解释 0.7 数字。第一种情况是 LLVM,第二种情况是
NSDecimalNumber的实现。就这样。我认为这没什么大不了的。 -
为什么要使用
NSDecimalNumber以及为什么要将NSDecimalNumber转换为double?
标签: objective-c nsdecimalnumber