В 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.