如何在Go中执行除法


88

我正在尝试在Go中执行简单的划分。

fmt.Println(3/10)

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

谢谢

Answers:


89

该表达式3 / 10是未类型化的常量表达式。规范 说明了有关常量表达式的内容

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

因为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)prints 0.3


我正在接受输入,假设它是百分比。例如,如果用户给出30,我必须执行30/100 * somenumber。输入将始终是整数。在这种情况下如何执行除法?
Vrushank Doshi

整数转换为浮点数。
松饼顶部

我尝试了fmt.Println(float64(3/10)),但它给了我0
Vrushank Doshi

7
@VrushankDoshi:fmt.Println(float64(3) / float64(10))0.3
peterSO

20

正如@Cerise和规范所提到的

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

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

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


是! 只是第一个操作数
SMMousavi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.