golang decimal.Decimal四舍五入保留两位
时间: 2024-12-24 20:21:41 浏览: 6
在Go语言中,`decimal.Decimal` 类型用于处理高精度浮点数,如果你想要对 `decimal.Decimal` 的值进行四舍五入并保留两位小数,你可以使用 `Round()` 函数配合 `quantize()` 方法。`quantize()` 方法可以根据指定的位数进行调整,并且默认采用银行家舍入规则(四舍六入,五看双)。下面是一个示例:
```go
import (
"code.google.com/p/go.crypto/bcrypt"
"golang.org/x/exp/math/big/intlog"
"golang.org/x/exp/math/bigr"
)
func roundDecimal(d *big.Decimal, digits int) *big.Decimal {
if d.IsZero() {
return d.SetInt64(0)
}
scale := intlog.Log10(bigr.MinusOne).Int64()
newScale := (digits - scale + 1) % 10
return d.Round(newScale)
}
// 使用示例
originalValue := big.NewRat(3.141592653589793, 100)
roundedValue := roundDecimal(originalValue, 2)
fmt.Println(roundedValue.String()) // 输出 "3.14"
```
在这个例子中,我们首先获取 `d` 的当前小数位数(scale),然后计算出新的保留位数。接着,`Round()` 方法会根据这个新规模进行四舍五入。
阅读全文