`golang` float64 乘法上高精度错误的正确路由方法是什么
What is the right way for rouding of high precision error on `golang` float64 multiplication
当将 golang float64 值与整数相乘时,由于浮点数的存储方式,结果包含高精度错误值。
这是一个代码片段,显示了我所指的问题
package main
import (
"fmt"
)
func main() {
var l float64 = 0.2
fmt.Println("Hello, playground",l*6)
}
结果是
Hello, playground 1.2000000000000002
这是相同的剧本link playground
是否有 standard/best 错误四舍五入的做法?
这取决于用例是什么以及您要显示多少位数。你可以这样做:
func main() {
var l float64 = 0.2
fmt.Printf("Hello, playground %.8f",l*6)
}
并且只显示小数点后8个单位。但是,如果您正在处理货币,例如,您最好根本不使用浮点数,并将所有内容保存为美分(在美国)或数量(最低面额的货币)。
当将 golang float64 值与整数相乘时,由于浮点数的存储方式,结果包含高精度错误值。 这是一个代码片段,显示了我所指的问题
package main
import (
"fmt"
)
func main() {
var l float64 = 0.2
fmt.Println("Hello, playground",l*6)
}
结果是
Hello, playground 1.2000000000000002
这是相同的剧本link playground
是否有 standard/best 错误四舍五入的做法?
这取决于用例是什么以及您要显示多少位数。你可以这样做:
func main() {
var l float64 = 0.2
fmt.Printf("Hello, playground %.8f",l*6)
}
并且只显示小数点后8个单位。但是,如果您正在处理货币,例如,您最好根本不使用浮点数,并将所有内容保存为美分(在美国)或数量(最低面额的货币)。