Go: различные методы точного округления чисел с плавающей запятой

В Go (Golang) округление чисел с плавающей запятой до определенной точности может оказаться важным для точных вычислений или представления данных. В этой статье блога мы рассмотрим несколько способов достижения этой цели, а также примеры кода. Давайте погрузимся!

Метод 1: использование функции fmt.Sprintf()

package main
import (
    "fmt"
    "math"
)
func roundUsingSprintf(num float64, precision int) float64 {
    format := fmt.Sprintf("%%.%df", precision)
    rounded := fmt.Sprintf(format, num)
    result, _ := strconv.ParseFloat(rounded, 64)
    return result
}
func main() {
    num := 3.14159265359
    precision := 2
    rounded := roundUsingSprintf(num, precision)
    fmt.Println(rounded) // Output: 3.14
}

Метод 2: использование math.Round() и math.Pow()

package main
import (
    "fmt"
    "math"
)
func roundUsingRoundAndPow(num float64, precision int) float64 {
    scale := math.Pow(10, float64(precision))
    rounded := math.Round(num*scale) / scale
    return rounded
}
func main() {
    num := 3.14159265359
    precision := 2
    rounded := roundUsingRoundAndPow(num, precision)
    fmt.Println(rounded) // Output: 3.14
}

Метод 3. Использование собственной функции округления

package main
import (
    "fmt"
    "math"
)
func round(num float64, precision int) float64 {
    var rounder float64
    pow := math.Pow(10, float64(precision))
    intermediate := num * pow
    _, frac := math.Modf(intermediate)
    if num < 0 {
        rounder = math.Ceil(intermediate - 0.5)
    } else {
        rounder = math.Floor(intermediate + 0.5)
    }
    result := rounder / pow
    return result
}
func main() {
    num := 3.14159265359
    precision := 2
    rounded := round(num, precision)
    fmt.Println(rounded) // Output: 3.14
}

В этой статье мы рассмотрели три различных метода округления чисел с плавающей запятой в Go с заданной точностью. Функции fmt.Sprintf(), math.Round() и math.Pow(), а также пользовательская функция округления обеспечивают способы достижения точного округления. Используя эти методы, вы можете обеспечить точные вычисления и улучшить представление данных в ваших приложениях Go.