【发布时间】:2015-12-25 05:55:48
【问题描述】:
我正在尝试在 Go 中执行一个简单的除法。
fmt.Println(3/10)
这会打印 0 而不是 0.3。这有点奇怪。有人可以分享这背后的原因吗?我想在 Go 中执行不同的算术运算。
谢谢
【问题讨论】:
标签: math go floating-point integer-division
我正在尝试在 Go 中执行一个简单的除法。
fmt.Println(3/10)
这会打印 0 而不是 0.3。这有点奇怪。有人可以分享这背后的原因吗?我想在 Go 中执行不同的算术运算。
谢谢
【问题讨论】:
标签: math go floating-point integer-division
表达式3 / 10 是一个无类型的常量表达式。规范says this about constant expressions
如果二元运算的操作数是不同类型的无类型常量,则该运算以及非布尔运算的结果使用此列表后面出现的类型:整数、符文、浮点数、复数。
因为3 和10 是无类型整数常量,所以表达式的值是无类型整数(在本例中为0)。
其中一个操作数必须是浮点常数,才能将结果转为浮点常数。以下表达式计算为无类型浮点常量0.3:
3.0 / 10.0
3.0 / 10
3 / 10.0
也可以使用类型化常量。以下表达式计算为 float64 常量 0.3:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
打印任何上述表达式将打印0.3。例如,fmt.Println(3.0 / 10) 打印 0.3。
【讨论】:
fmt.Println(float64(3) / float64(10)) 给了0.3。
【讨论】:
fmt.Println(3.0/10) 更改为fmt.Println(3/10.0),并得到与更改第一个操作数相同的结果?也许在 golang 中有所改变 :) play.golang.org/p/5xqlAtNb8So