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

7 回复

大部分语言下整数运算返回的都是整数,不包含小数部分。

看你的需求,转为浮点数除最简单,但是浮点数存在误差问题。
另外的选择是使用 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

然而,当小整数(假设是int8int16)除以大整数(如int64),且结果超出了小整数类型的表示范围时,编译器会报错,因为这样的操作在类型安全上是不允许的。

为了解决这个问题,你可以采取以下几种方法:

  1. 显式类型转换:将小整数显式转换为大整数类型(如int64),再进行除法运算。例如:

    var smallInt int8 = 10
    var bigInt int64 = 1000
    result := int64(smallInt) / bigInt
  2. 使用浮点类型:将整数转换为浮点类型(如float64),进行除法运算后再转换回整数(如果需要),但注意这可能会引入精度损失。

  3. 检查范围:在进行除法之前,检查被除数和除数是否会导致溢出,从而避免运行时错误。

总之,处理小整数除以大整数的问题时,需要确保类型兼容和范围安全。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!