【发布时间】:2017-01-04 08:48:54
【问题描述】:
我注意到一些浮点的转换方式不同。 This question helps me about floating points 但是还是不知道为什么会这样?我添加了两个关于示例代码的调试模式屏幕截图。示例值:7.37 和 9.37。在 swift 中遇到它,并且肯定 swift 使用 IEEE 754 floating point standard 请解释这是怎么发生的?转化结果有何不同?
if let text = textField.text {
if let number = formatter.number(from: text) {
return Double(number)
}
return nil
}
【问题讨论】:
-
浮点数具有有限精度 - 您链接到的答案的哪一部分不清楚?
-
比较stackoverflow.com/a/39777334/1187415:根据数字的打印方式,使用
description或debugDescription,这两种方法使用不同的精度转换为字符串。 -
Linked Q 很清楚,但我不明白为什么 7.37 不像 9.37 那样收敛?我的意思是 7.37 从右侧收敛 (7.3700000..1) 但 9.37 从左侧收敛 (9.36999..2) 。 @martin-r 感谢您的回答,但我仍然不清楚。正如您在评论中解释的那样,我没有选择任何不同的转换精度
-
7.37 和 9.37 都不能准确地表示为二进制浮点数。实际存储的数字可以略小或大。
-
浮点数的尾数由有限位数表示。由于 9 需要 4 位来表示 0x1001,而 7 需要 3 位来表示 0x111,因此表示
.37的位会减少 1 位,因此如果丢失的位是 1,则近似值将不会那么准确。
标签: swift math floating-point ieee-754