为什么在浮点转换中会发生这种情况?

时间:2017-01-04 08:48:54

标签: swift math floating-point ieee-754

我注意到一些浮点转换不同。 This question helps me about floating points但是仍然不知道为什么会这样?我在调试模式中添加了两个关于示例代码的屏幕截图。示例值:7.37和9.37。快速而迅速地使用它IEEE 754 floating point standard请解释它是如何发生的?转换的结局如何不同?

if let text = textField.text {
  if let number = formatter.number(from: text) {
     return Double(number)
  }
  return nil
}

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

Double浮点数存储在base-2中,并不能完全代表所有小数。

在这种情况下,7.37和9.37四舍五入到最接近的浮点数,分别为7.37000000000000010658141036401502788066864013671875和9.3699999999999992184029906638897955417633056640625。

当然,这种十进制表示对于一般用途来说太难以处理,因此编程语言通常会打印较短的近似十进制表示。

是两个受欢迎的选择
  1. 将被正确舍入为原始数字的最短字符串(在本例中分别为7.379.37)。
  2. 圆满17位有效数字is guaranteed to give the correct value when converting back to binary
  3. 这些似乎与您看到的2个调试输出值相对应。