gpt4 book ai didi

Go:使用乘数将 float64 转换为 int

转载 作者:IT王子 更新时间:2023-10-29 01:21:43 25 4
gpt4 key购买 nike

我想将一个 float64 数字转换为 1.0031003(整数类型)。我的实现只是将 float641000 相乘并将其转换为 int

package main

import "fmt"


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

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

最佳答案

Go spec: Conversions:

Conversions between numeric types

When converting a floating-point number to an integer, the fraction is discarded (truncation towards zero).

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

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

由于 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 < 0 {
return int(f - 0.5)
}
return int(f + 0.5)
}

关于Go:使用乘数将 float64 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com