我正试图在Go中执行一个简单的划分。
fmt.Println(3/10)
这打印0而不是0.3。这有点奇怪。有人可以分享一下这背后的原因是什么?我想在Go中执行不同的算术运算。
由于
答案 0 :(得分:70)
表达式3 / 10
是一个无类型的常量表达式。规范says this about constant expressions
如果二元操作的操作数是不同类型的无类型常量,则操作和非布尔操作的结果使用此列表中稍后出现的类型:整数,符文,浮点数,复数。 / p>
由于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
。
答案 1 :(得分:10)