Go 无法舍入到最接近的0.0001
我有以下资料:Go 无法舍入到最接近的0.0001,go,Go,我有以下资料: package main import ( "fmt" "math" ) func main() { nums := []float64{ 0.15807659924030304, 0.10901273787021637, 0.04955724626779556, 0.05886702239513397, } for _, f := range nums { fmt.Println(f, math.Ro
package main
import (
"fmt"
"math"
)
func main() {
nums := []float64{
0.15807659924030304, 0.10901273787021637, 0.04955724626779556, 0.05886702239513397,
}
for _, f := range nums {
fmt.Println(f, math.Round(f/.0001)*.0001)
}
}
输出为:
0.15807659924030304 0.15810000000000002
0.10901273787021637 0.109
0.04955724626779556 0.049600000000000005
0.05886702239513397 0.0589
为什么有些会以大于4位小数结束?我如何纠正它
试着用那个。%0.4f
将其格式设置为小数点后4位。事实上,如果您只需要字符串,请使用它而不是Round函数
%b
将显示实际值。在Go中,将显示一个大的十进制(以10为基数)值,一个p,然后是2的幂指数。因此,当它显示569530970747692P-55
时,您可以通过执行5695309707476992/2^55
试着用那个。%0.4f
将其格式设置为小数点后4位。事实上,如果您只需要字符串,请使用它而不是Round函数
%b
将显示实际值。在Go中,将显示一个大的十进制(以10为基数)值,一个p,然后是2的幂指数。因此,当它显示5695309074746992P-55
时,您可以通过执行5695309074746992/2^55
fmt.Println(f,math.Round(f/.0001)/10000)基本计算机浮点:实际值存储在二进制基数-2中。您正在显示的是base-10。任何不能完全被2整除的值在二进制浮点中都不能精确。它从来都不是你认为你拥有的分数。可能是.fmt.Println(f,math.Round(f/.0001)/10000)基本计算机浮点的重复:实际值存储在二进制基数-2中。您正在显示的是base-10。任何不能完全被2整除的值在二进制浮点中都不能精确。它从来都不是,永远都不是你认为你拥有的分数。可能是的重复。但这给了我一个字符串,而不是一个float@MarissaLevy我不知道你需要什么。如果你需要一个float,那么你就需要Round方法,就像你做的那样。不用担心…我想我不是很具体。但是这给了我一个字符串,而不是一个float@MarissaLevy我不知道你需要什么。如果你需要一个浮点数,那么你就需要圆的方法,就像你做的那样。不用担心……我想我不是很具体。
fmt.Printf("%f %b %0.4f\n", f, f, math.Round(f/.0001)*.0001)