下面的符合预期:
a := (float64(0) - 32) * 5 / 9
b := (0.0 - 32) * 5 / 9
fmt.Println(a == b, a, b)
// Output: true -17.77777777777778 -17.77777777777778
但它们分别加上 273.15,结果竟然不同了:
c := (float64(0) - 32)*5/9 + 273.15
d := (0.0 - 32)*5/9 + 273.15
fmt.Println(c == d, c, d)
// Output: false 255.3722222222222 255.37222222222223
这是为什么?
---
https://play.golang.org/p/0v1PjVwNOnI
拿代码测试了一下,
其实刚才隐约感觉这个和存储的字节数有关系.
```go
a := (float64(0) +1.1) * 5 / 9 + 200.14
b := (0.0 +1.1) * 5 / 9 + 200.14
fmt.Println(a == b, a, b)
```
不超过255, 就会相等,不知道深层次的原理是什么也许需要调汇编看一下才明白.
不研究了,知道坑避开就行, 浮点数不可以用==进行相等判断是一个rule
#2
更多评论