Wen*_*Adi 2 floating-point type-conversion go
我想转换一个float64数字,让我们也说1.003要1003(整型).我的实现只是将float64with 乘以1000并将其转换为int.
package main
import "fmt"
func main() {
var f float64 = 1.003
fmt.Println(int(f * 1000))
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行该代码时,我得到的1002不是1003.因为Go会自动存储1.003为1.002999...变量.在Golang上进行这种操作的正确方法是什么?
数字类型之间的转换
将浮点数转换为整数时,将丢弃该分数(截断为零).
所以基本上当你将浮点数转换为整数时,只保留整数部分.
如果您只是想避免因使用有限位表示而产生的错误,只需0.5在转换之前添加数字即可int.无需外部库或函数调用(来自标准库).
由于float -> int转换不是舍入而是保留整数部分,因此这将为您提供所需的结果.考虑到可能的更小和更大的代表性:
1002.9999 + 0.5 = 1003.4999; integer part: 1003
1003.0001 + 0.5 = 1003.5001; integer part: 1003
Run Code Online (Sandbox Code Playgroud)
所以简单地写一下:
var f float64 = 1.003
fmt.Println(int(f * 1000 + 0.5))
Run Code Online (Sandbox Code Playgroud)
将它包装成一个函数:
func toint(f float64) int {
return int(f + 0.5)
}
// Using it:
fmt.Println(toint(f * 1000))
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
因此,如果您有负数,则必须:
0.5而不是添加它0.5但减去1将此结合到我们的辅助函数中:
func toint(f float64) int {
if f < 0 {
return int(f - 0.5)
}
return int(f + 0.5)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |