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

时间:2016-01-31 15:59:03

标签: go

将float转换为int时,将丢弃小数。什么是一种干净的投射方式,以便将其四舍五入到最接近的整数。

npm install 应该等于4而不是3。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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)是“字符串3.6”,而f != 0输出是“ bool true”。