我有以下代码:

x := []byte("1575455669.4")
bits := binary.LittleEndian.Uint64(x)
f := math.Float64frombits(bits)

在调用fmt.Println(f)时,我期望1.5754556694e+09。但是相反,我最终得到1.451098468672448e-47
当我尝试通过strconv.ParseFloat(string(x), 64)进行相同的转换时,我得到了正确的结果。我在这里做错了什么?

最佳答案

这:

x := []byte("1575455669.4")

将为您提供"1575455669.4"字符串的(UTF-8编码)字节。这与使用IEEE 754标准的浮点数1575455669.4的内存表示形式无关。但是接下来要做的只是假设:
bits := binary.LittleEndian.Uint64(x)
f := math.Float64frombits(bits)

您有一个以10为基数的字符串表示形式的数字,必须使用strconv.ParseFloat(string(x), 64)对其进行解析并将其作为float64

关于go - Golang无法使用math.Float64frombits将[] byte (“1575455669.4”)转换为float64,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59213049/

10-11 07:01