当将float转换为int时,将舍弃小数。什么是干净的转换方法,以便将其舍入到最接近的整数。
x := int(3.6)
应该等于4而不是3。
小智 10
在 Go 中将 float 转换为 int 时,您可以使用int(math.Round(f))
四舍五入到最接近的整数。当浮点数设置为字节或符文时,小数点也会被丢弃。当它设置为字符串或布尔值时,不会发生截断。
package main\n\nimport (\n . "fmt"\n . "math"\n)\n\nfunc main() {\n f := 3.6\n c := []interface{}{byte(f), f, int(Round(f)), rune(f), Sprintf("%.f", f), f != 0}\n checkType(c)\n}\nfunc checkType(s []interface{}) {\n for k, _ := range s {\n Printf("%T %v\\n", s[k], s[k])\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\nRound 返回最接近的整数,从零开始四舍五入一半。请参阅https://golang.org/pkg/math/#Round。请参阅/sf/answers/4305263091/。
\nf := 3.6
截断为 \xe2\x80\x9cuint8 3\xe2\x80\x9d,f
为 \xe2\x80\x9cfloat64 3.6\xe2\x80\x9d,int(Round(f))
向上舍入为 \xe2\x80\x9cint 4\xe2\x80\x9d, rune(f)
截断为\xe2\x80\x9cint32 3\xe2\x80\x9d Sprintf("%.f", f)
是 \xe2\x80\x9cstring 3.6\xe2\x80\x9d 并f != 0
输出 \xe2\x80\x9cbool true\xe2\x80\x9d。
归档时间: |
|
查看次数: |
717 次 |
最近记录: |