Golang Go语言中小整数除以大整数的问题
Golang Go语言中小整数除以大整数的问题
golang 里面的除数计算很 bug
比如 A 为 5 , B 为 10
B/A = 2 这个很正常
但是 但是 但是
A/B = 0
正常来说 A/B 结果应该是 0.5
但是这种情况 golang 因为两个数都是 int 的原因,直接把小数去了,留下了意外的 0
嗯,抛砖引玉,请问各位有什么好的处理办法没?
比如在 golang 中,我非要用 5/10 得到结果 0.5
大部分语言下整数运算返回的都是整数,不包含小数部分。
看你的需求,转为浮点数除最简单,但是浮点数存在误差问题。
另外的选择是使用 decimal 类型,这个需要第三方库。
更多关于Golang Go语言中小整数除以大整数的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
弱类型语言是支持这个的 比如 nodejs
如果我想用 golang 实现这样的效果 请问是否有具体方法呢 我刷搜索没找到 自己用代码尝试了下感觉挺恶心的
难道是提前把 5 和 10 定义成 float 类型 我试试
#3
package main
import "fmt"
func main() {
fmt.Println(float64(5) / float64(10))
}
谢谢啊
所有整数运算都是这样的,建议补习基础知识
在Golang(Go语言)中,当你尝试用小整数除以大整数时,会遇到一些特定的行为和注意事项。
首先,Go语言中的整数类型(如int
, int8
, int16
, int32
, int64
, uint
, uint8
等)在除法运算时,会保持其类型的完整性。如果除数和被除数类型相同,结果也会是该类型。例如,两个int32
类型的整数相除,结果仍然是int32
。
然而,当小整数(假设是int8
或int16
)除以大整数(如int64
),且结果超出了小整数类型的表示范围时,编译器会报错,因为这样的操作在类型安全上是不允许的。
为了解决这个问题,你可以采取以下几种方法:
-
显式类型转换:将小整数显式转换为大整数类型(如
int64
),再进行除法运算。例如:var smallInt int8 = 10 var bigInt int64 = 1000 result := int64(smallInt) / bigInt
-
使用浮点类型:将整数转换为浮点类型(如
float64
),进行除法运算后再转换回整数(如果需要),但注意这可能会引入精度损失。 -
检查范围:在进行除法之前,检查被除数和除数是否会导致溢出,从而避免运行时错误。
总之,处理小整数除以大整数的问题时,需要确保类型兼容和范围安全。