package main import "fmt" func main() { num1 := 5 / 2 // var num1 int = 5 / 2 fmt.Printf("num1(%T) is %+v \n", num1, num1) // num1(int) is 2 // 重要提醒:Go语言没有隐式转换,这里也不会推导出num1为浮点数 num2 := float64(5 / 2) // var num2 float64 = float64(5 / 2) fmt.Printf("num2(%T) is %+v \n", num2, num2) // num2(float64) is 2 num3 := float64(5) / 2 // var num3 float64 = float64(5) / 2 fmt.Printf("num3(%T) is %+v \n", num3, num3) // num3(float64) is 2.5 num4 := 5 / float64(2) // var num4 float64 = 5 / float64(2) fmt.Printf("num4(%T) is %+v \n", num4, num4) // num4(float64) is 2.5 num5 := float64(5) / float64(2) // var num5 float64 = float64(5) / float64(2) fmt.Printf("num5(%T) is %+v \n", num5, num5) // num5(float64) is 2.5 var num6 float64 = 5 / 2 // var num6 float64 = 5 / 2 fmt.Printf("num6(%T) is %+v \n", num6, num6) // num6(float64) is 2 // 重要提醒:这里只是把计算结果整数2转为浮点数2,并不是我们期望的结果 } // ========== 总结 ========== // // 1、Go语言没有隐式转换,所以两个整数求商一定要特别注意,如果商是小数,那么小数部分会被丢弃,最终结果也是整数,而不是浮点 // 数,哪怕保存最终结果的变量显式声明为浮点数也没用。(参考num1和num6的计算) // 2、如果最终计算结果可能为浮点数,那么最安全的办法是先将其中一个操作数或全部操作数转为浮点数,然后再进行计算。
Copyright © 2024 码农人生. All Rights Reserved