登录
首页 >  Golang >  Go问答

Go:使用乘法器将 float64 转换为 int

来源:Golang技术栈

时间:2023-04-26 11:56:43 449浏览 收藏

积累知识,胜过积蓄金银!毕竟在##column_title##开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Go:使用乘法器将 float64 转换为 int》,就带大家讲解一下golang知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我想转换一个float64数字,假设它1.0031003(整数类型)。我的实现只是将float64with相乘1000并将其转换为int.

package main

import "fmt"


func main() {
  var f float64 = 1.003
  fmt.Println(int(f * 1000))
}

但是当我运行该代码时,我得到的1002不是1003. 因为 Go 会自动将1.003as存储1.002999...在变量中。在 Golang 上做这种操作的正确方法是什么?

正确答案

Go 规范:转换:

数值类型之间的转换

将浮点数转换为整数时,会丢弃小数(截断至零)。

所以基本上当你将浮点数转换为整数时,只保留整数部分。

如果您只是想避免因用有限位表示而产生的错误,只需0.5在将其转换为int. 不需要外部库或函数调用(来自标准库)。

由于float -> int转换 不是四舍五入 而是 保留整数部分 ,这将为您提供所需的结果。考虑到可能的更小和更大的表示:

1002.9999 + 0.5 = 1003.4999;     integer part: 1003
1003.0001 + 0.5 = 1003.5001;     integer part: 1003

所以只需写:

var f float64 = 1.003
fmt.Println(int(f * 1000 + 0.5))

要将其包装到一个函数中:

func toint(f float64) int {
    return int(f + 0.5)
}

// Using it:
fmt.Println(toint(f * 1000))

在Go Playground上试一试。

笔记:

当你应用这个时要小心,以防负数!例如,如果您的值为-1.003,那么您可能希望结果为-1003。但是如果你添加0.5它:

-1002.9999 + 0.5 = -1002.4999;     integer part: -1002
-1003.0001 + 0.5 = -1002.5001;     integer part: -1002

因此,如果您有负数,则必须:

  • 减去0.5而不是添加它
  • 或从结果0.5中加减1

将其合并到我们的辅助函数中:

func toint(f float64) int {
    if f 

理论要掌握,实操不能落!以上关于《Go:使用乘法器将 float64 转换为 int》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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