如何在Go中进行分工

Vru*_*shi 69 math floating-point go integer-division

我想在Go中执行一个简单的划分.

fmt.Println(3/10)
Run Code Online (Sandbox Code Playgroud)

这打印0而不是0.3.这有点奇怪.有人可以分享一下这背后的原因是什么?我想在Go中执行不同的算术运算.

谢谢

Cer*_*món 74

表达式3 / 10是无类型常量表达式.规范 说明了常量表达式

如果二元运算的操作数是不同类型的无类型常量,则操作和对于非布尔运算,结果使用此列表中稍后出现的类型:整数,符文,浮点数,复数.

因为310是无类型的整数常量,所以表达式的值是无类型整数(0在本例中).

其中一个操作数必须是浮点常量,结果为浮点常量.以下表达式求值为无类型浮点常量0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0
Run Code Online (Sandbox Code Playgroud)

也可以使用类型常量.以下表达式求值为float64常量0.3:

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
Run Code Online (Sandbox Code Playgroud)

将打印上述任何表达式0.3.例如,fmt.Println(3.0 / 10)打印0.3.

  • @VrushankDoshi:`fmt.Println(float64(3)/ float64(10))`给出`0.3`. (7认同)
  • 请编辑您的答案,因为正如 @robstarbuck 的答案所述,“3 / 10.0”不起作用。 (2认同)

rob*_*uck 12

正如@Cerise和规范所述

算术运算符应用于数值,并产生与第一个操作数相同类型的结果.

在这种情况下,只有第一个操作数需要是一个浮点.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3
Run Code Online (Sandbox Code Playgroud)