Округление от нуля
Используйте math.Round, чтобы вернуть ближайшее целое число, как float64, округляя связи от нуля.
fmt.Println(math.Round(-0.6)) // -1
fmt.Println(math.Round(-0.4)) // -0
fmt.Println(math.Round(0.4)) // 0
fmt.Println(math.Round(0.6)) // 1
Обратите внимание на особые случаи.
Round(±0) = ±0
Round(±Inf) = ±Inf
Round(NaN) = NaN
Округлить до четного числа
Используйте math.RoundToEven, чтобы вернуть ближайшее целое число, как float64, округляя связи до четного числа.
fmt.Println(math.RoundToEven(0.5)) // 0
fmt.Println(math.RoundToEven(1.5)) // 2
Преобразовать в тип int
Обратите внимание, что при преобразовании числа с плавающей точкой в тип int дробь отбрасывается (усечение до нуля).
fmt.Println(int64(1.9)) // 1
fmt.Println(int64(-1.9)) // -1
Предупреждение: если тип результата не может представлять значение, преобразование завершается успешно, но результат зависит от реализации.
До версии Go 1.10
Следующие реализации эквивалентны math.Round и math.RoundToEven, но менее эффективны.
// Round возвращает ближайшее целое число,
// округляя связи от нуля.
func Round(x float64) float64 {
t := math.Trunc(x)
if math.Abs(x-t) >= 0.5 {
return t + math.Copysign(1, x)
}
return t
}
// RoundToEven возвращает ближайшее целое число,
// округляя связи до четного числа.
func RoundToEven(x float64) float64 {
t := math.Trunc(x)
odd := math.Remainder(t, 2) != 0
if d := math.Abs(x - t); d > 0.5 || (d == 0.5 && odd) {
return t + math.Copysign(1, x)
}
return t
}
Читайте также:
- Спецификация Go: логические, числовые, строковые типы
- Преобразования между int, int64 и string в Golang
- Преобразования в Golang
Комментариев нет:
Отправить комментарий