登录
首页 >  Golang >  Go问答

为什么这两个 float64 有不同的值?

来源:Golang技术栈

时间:2023-04-01 13:10:19 408浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《为什么这两个 float64 有不同的值?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下golang,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

考虑以下两种情况:

fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)

(去游乐场链接)

第二个打印 9.120000000000001,这实际上很好,[我明白为什么会这样](https://stackoverflow.com/questions/21895756/why- are-floating-point-numbers-inaccurate)。

但是,为什么第一行打印的是 9.12,而末尾没有 '01?Go 是否将两个无类型常量相乘并在编译时简单地用 9.12 文字替换它们?

正确答案

根据规格

常量表达式总是被精确计算;中间值和常量本身可能需要比语言中任何预声明类型支持的精度大得多的精度。

自从

912 * 0.01

是一个常量表达式,它被精确计算。因此,写作与写作fmt.Println(912 * 0.01)具有相同的效果fmt.Println(9.12)。当您固定912float64时,浮点乘法的另一个操作数也隐式固定到float64。因此,表达式的`float64(912)

  • 0.01行为类似于float64(912) * float64(0.01)。0.01 在 a 中不能完全表示,因此精度在与第一个示例的参数中出现float64的表达式不同的地方丢失,解释了不同的结果。float64(912 * 0.01)``fmt.Println()`

今天带大家了解了golang的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>