Показаны сообщения с ярлыком тип float в Golang. Показать все сообщения
Показаны сообщения с ярлыком тип float в Golang. Показать все сообщения

вторник, 5 мая 2020 г.

Округление float до 2 знаков после запятой в Golang

Float в string

Чтобы отобразить значение в виде строки, используйте метод fmt.Sprintf.

s := fmt.Sprintf("%.2f", 12.3456) // s == "12.35"

В посте об fmt перечислены наиболее распространенные глаголы и флаги форматирования.

Float в float

Чтобы округлить до значения с плавающей запятой, используйте один из этих методов.

x := 12.3456
fmt.Println(math.Floor(x*100)/100) // 12.34 (округление вниз)
fmt.Println(math.Round(x*100)/100) // 12.35 (округление к ближайшему)
fmt.Println(math.Ceil(x*100)/100)  // 12.35 (округление вверх)

Из-за причуд в представлений с плавающей точкой эти округленные значения могут быть слегка отклонены.

Подробней о работе и реализации с примитивными типами можно прочесть в книге Golang для профи.


Читайте также:


купить игрушку gopher

Округление числа с плавающей точкой до целочисленного значения в Golang

Округление от нуля

Используйте 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
}


Читайте также:


купить игрушку gopher