如何在Go中进行分工

时间:2015-09-28 03:46:01

标签: math go floating-point integer-division

我正试图在Go中执行一个简单的划分。

fmt.Println(3/10)

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

由于

2 个答案:

答案 0 :(得分:70)

表达式3 / 10是一个无类型的常量表达式。规范says this about constant expressions

  

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

由于310是无类型的整数常量,因此表达式的值是无类型整数(在本例中为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)

正如@Cerise所提及的那样,根据规范

  

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

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

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

Example