go:整数除以浮点数的问题

发布于 2022-09-06 00:40:33 字数 187 浏览 12 评论 0

    fmt.Println(11 / (10.0 * 1))
    s := []byte("hello world")
    fmt.Println(len(s) / (10.0 * 1))

stdout:
1.1
1

两个的计算结果为什么不一致:都是int/float

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溺深海 2022-09-13 00:40:33

这是因为第一个左侧类型为数值常量,会根据右侧运算值类型float类确定左侧类型,之后再运算,float/float=float,所以是1.1,而第二个len函数返回类型为确定的int,运算会按照左侧类型来执行,右侧被转换为int类型,因此就是int/int=int 值为1

// 如果左侧运算符类型确定,则右侧转为左侧类型再运算
var num1 int = 11
fmt.Println(num1 / 10)
fmt.Println(num1 / 10.0)

// 如果左侧类型不确定,则根据右侧类型推导左侧类型
fmt.Println(11 / 10)
fmt.Println(11 / 10.0)

自动类型转换参考 https://golang.org/ref/spec#C...

A constant value x can be converted to type T in any of these cases:

x is representable by a value of type T.
x is a floating-point constant, T is a floating-point type, and x is representable by a value of type T after rounding using IEEE 754 round-to-even rules, but with an IEEE -0.0 further rounded to an unsigned 0.0. The constant T(x) is the rounded value.
x is an integer constant and T is a string type. The same rule as for non-constant x applies in this case.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文