面试题答案
一键面试舍入误差原因
在计算机中,浮点数采用二进制表示。像 0.1
和 0.2
这样的十进制小数,无法精确地用二进制表示。
例如,0.1
的二进制表示是一个无限循环小数:0.0001100110011...
,在有限的内存空间中存储时,会进行近似截断,导致精度损失。当 num1
和 num2
相加时,这种精度损失会累积,使得结果与预期的 0.3
有偏差。
简单处理方式
可以使用 math/big
包中的 Float
类型,它能提供更高的精度。示例代码如下:
package main
import (
"fmt"
"math/big"
)
func main() {
num1 := big.NewFloat(0.1)
num2 := big.NewFloat(0.2)
num3 := new(big.Float).Add(num1, num2)
result, _ := num3.Float64()
fmt.Println(result)
}
在上述代码中,big.NewFloat
函数创建高精度的 Float
对象,Add
方法进行高精度加法运算,最后通过 Float64
方法转换回普通的 float64
类型。这样可以尽量接近正确结果。