go 的加减乘除运算注意事项,及相互转化问题

 基础语法  2024-08-15  admin  88  118

package main

import (
	"fmt"
)

func main() {
	var intA int = 10
	var intB int = 9

	var floatA float64 = 10
	var floatB float64 = 9

	//在 Go 语言中,操作数的类型必须匹配。也就是说,进行运算时,操作数的类型必须一致或能够进行合理的转换。
	//具体来说,在你的代码中,你试图将一个 float64 类型的值与一个 int 类型的值进行除法运算,而 Go 语言不允许直接进行这种类型不匹配的运算。

	fmt.Println(intA / intB)         // 结果应为int类型 1   解释: 1.1111111111向下取整为 1
	fmt.Println(intA / intB * 9)     // 结果应为int类型 9  解释: 9.9999999999向下取整为 9
	fmt.Println(intA / intB * 9.000) // 结果应为int类型 9  解释: 9.9999999999向下取整为 9
	//fmt.Println(intA / intB * 9.9)     // error   9.9 (untyped float constant) truncated to int
	//fmt.Println(10.1 / intB)           // error   10.1 (untyped float constant) truncated to int

	fmt.Println("---------------------")
	fmt.Println(10.0 / 9)    // 结果应为float类型 1.1111111111111112
	fmt.Println(10.0 / intB) // 结果应为int类型 1
	//fmt.Println(10.1 / intB) // error   10.1 (untyped float constant) truncated to int
	fmt.Println(10.1 / floatB) // 结果应为float类型 1.1222222222222222

	fmt.Println("---------------------")
	fmt.Println(floatA / floatB) // 结果应为float类型 1.1111111111111112
	fmt.Println(floatA / 9)      // 结果应为float类型 1.1111111111111112

	// 特别注意这种情况
	fmt.Println((2.5 + 7.5) / intB)   // 结果应为int类型 1  解释: 1.1111111111111112向下取整为 1
	fmt.Println((2.5 + 7.5) / floatB) // 结果应为float类型 1.1111111111111112
	//fmt.Println((2.5 + 7.6) / intB) // error  (2.5 + 7.6) (untyped float constant 10.1) truncated to int

	//temp := 2.5 + 7.5
	//fmt.Println(temp / intB) // error invalid operation: temp / intB (mismatched types float64 and int)

	// 不明确的数据计算结果类型(10.0 9.0 等)会根据后面已明确的类型进行转换
}

// 当在表达式中混合使用整数和浮点数时,Go 会尝试自动进行类型转换,但只有在不会导致数据丢失的情况下才会这样做。
// 当你看到类似 truncated to int 的错误时,这通常意味着 Go 试图将一个浮点数转换为整数,但转换过程中丢失了小数部分。
// 在进行除法运算时,特别是当涉及到整数时,要特别注意结果是否如你所期望的那样进行了取整。


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

相关推荐


点名工具,抽奖软件

点名工具,抽奖软件

酷炫的倒计时客户端

QQ: 425100867捐赠开发者:

AI人脸替换工具离线版V6.0 最新版下载

AI人脸替换工具离线版V6.0 最新版下载下载 解压 双击运行roop_rope_facefusion_V60.exe 文件即可下载链接:https://pan.quark.cn/s/be7953632126AI人脸替换工具离线版V6.0

Android各个版本与API等级之间的对应关系

API等级 1 - 3:Android 1.0 (Astro,也被称为“铁臂阿童木”)Android 1.1 (Petit Four,即“花色小蛋糕”)Android 1.5 (Cupcake)API等级 4:Android 1.6 (Donut)API等级 5 - 7:Android 2.0/2.0.1/2.1 (Éclair)API等级 8:Android 2.2/2.2.3 (Froyo)A