Go 中如何进行除法

问题描述 投票:0回答:1

我正在尝试在 Go 中执行简单的除法。

fmt.Println(3/10)

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

谢谢

math go floating-point integer-division
1个回答
123
投票

二元运算

3 / 10
的操作数是无类型常量。规范说明了关于无类型常量的二进制操作

如果二元运算的操作数是不同类型的无类型常量,则该运算以及对于非布尔运算的结果将使用此列表后面出现的类型:整数、符文、浮点、复数。

因为

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

要获得浮点常量结果,操作数之一必须是浮点常量。以下表达式计算为无类型浮点常量

0.3
:

3.0 / 10.0
3.0 / 10
3 / 10.0

当除法运算有一个无类型常量操作数和一个类型化操作数时,类型化操作数决定表达式的类型。确保键入的操作数是

float64
以获得
float64
结果。

下面的表达式 convert

int
变量到
float64
以获得
float64
结果
0.3
:

var i3 = 3
var i10 = 10
fmt.Println(float64(i3) / 10)
fmt.Println(3 / float64(i10))

运营示范游乐场

注意:数字文字

10.0
3.0
是无类型浮点常量,而不是
float64
。表达式
i3 / 10.0
3.0 / i10
计算结果为整数
0
,因为类型化操作数(
i3
i10
)决定结果的类型。

© www.soinside.com 2019 - 2024. All rights reserved.