2 回答
TA贡献1828条经验 获得超3个赞
float32
精度低于 。这两种类型都不能完全表示实数 -3942.2,但会越来越近。float64
float64
转换为 时,该值必须舍入为可表示为 的最接近的值。丢失的信息无法恢复;转换回将不会重现原始值。float32
float32
float64
第三个强制转换回 ,如 中所示,不会恢复原始值。它之所以看起来像这样,是因为 的默认舍入行为。默认情况下, 将打印具有足够数字的浮点值,以将其与相同类型的其他值区分开来。float32
float32(float64(float32(f)))
fmt.Println
fmt.Println
由于具有更高的精度,因此与其他值区分所需的十进制位数大于区分或与其他值区分开来所需的十进制位数。float64
float64(float32(f))
float64
float32(f)
float32(float64(float32(f)))
float32
TA贡献1802条经验 获得超5个赞
它们是相同的值,它只是显示一个有效数字较少的默认格式,而不是另一个。fmt.Println
儗
https://play.golang.org/p/hJs-5Oz_YlL
package main
import (
"fmt"
)
func main() {
f := float64(-3942.2)
fmt.Printf("float64(float32(f)):\t\t%.20f\n", float64(float32(f)))
fmt.Printf("float32(float64(float32(f))):\t%.20f\n", float32(float64(float32(f)))) // = -3942.2
}
// float64(float32(f)): -3942.19995117187500000000
// float32(float64(float32(f))): -3942.19995117187500000000
- 2 回答
- 0 关注
- 719 浏览
添加回答
举报