为了账号安全,请及时绑定邮箱和手机立即绑定

go - 在将float转换为int时如何舍入到最近的int

go - 在将float转换为int时如何舍入到最近的int

Go
呼啦一阵风 2021-12-07 17:04:30
将 float 转换为 int 时,将丢弃小数。什么是干净的投射方式,以便它四舍五入到最接近的整数。x := int(3.6) 应该等于 4 而不是 3。
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

int(f+0.5) 如果 >= .5 会导致它向上舍入


查看完整回答
反对 回复 2021-12-07
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

int(math.Round(f))在 Go 中将浮点数转换为 int 时,您可以使用舍入到最接近的整数。当浮点数设置为字节或符文时,小数也会被丢弃。当它设置为字符串或布尔值时,不会发生截断。


package main


import (

  . "fmt"

  . "math"

)


func main() {

  f := 3.6

  c := []interface{}{byte(f), f, int(Round(f)), rune(f), Sprintf("%.f", f), f != 0}

  checkType(c)

}

func checkType(s []interface{}) {

  for k, _ := range s {

     Printf("%T %v\n", s[k], s[k])

  }

}

Round 返回最接近的整数,从零四舍五入。请参阅https://golang.org/pkg/math/#Round。请参阅https://stackoverflow.com/a/61503758/12817546。


f := 3.6截断为“uint8 3”,f为“float64 3.6”,int(Round(f))向上舍入为“int 4”, rune(f)截断为“int32 3”, Sprintf("%.f", f)为“string 3.6”并f != 0输出“bool true”。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 398 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信