float32
的精度是小数点后面 6
位,这个我没说错吧。。(万一我记错了请批我)
那么我的理解就是把 float32
的 10000018
表示成科学计数法就应该是:1.000002e+07
(四舍五入了)
但是 go 输出的结果是:1.0000018e+07,代码如下
package main
import "fmt"
var num float32 = 10000018 // 8 位 <==> 1.0000018 * 10^7
func main() {
fmt.Println("num: ", num) // 1.0000018e+07 ??小数点后面怎么有 7 位
}
小数点后面怎么有 7 位?和我预想的不一样。。
并且我把 10000018 加个 7 得到 100000187 然后再试一次,又变成小数点后 8 位了,代码如下:
package main
import "fmt"
//var myfloat float32 = 10000018 // 8 位 <==> 1.0000018 * 10^7
var myfloat float32 = 100000182 // 9 位 <==> 1.00000182 * 10^8
var ans float32 = 100000187 // 9 位 <==> 1.00000187 * 10^8
func main() {
fmt.Println("myfloat: ", myfloat) // 1.00000184e+08
fmt.Println(myfloat == myfloat + 1) // true
fmt.Println("myfloat: ", myfloat+5) // 1.0000019e+08
fmt.Println(ans == myfloat+5) // false
}
1.00000184e+08 这个数有 8 个小数,我不太懂了。。
关于 IEEE-754 的介绍我也看了,还是有疑惑。
求大神指教。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.