如何在 Golang 中阅读浮点数注释?

7

当从一个结构体的map中打印一些值时,我看到某些float64值采用了替代符号。测试通过了,但是你如何阅读这种符号 (4e-06)。这个值确实等同于 "0.000004" 吗?

package main

import (
    "fmt"
    "strconv"
    "testing"
)

func TestXxx(t *testing.T) {

    num := fmt.Sprintf("%f", float64(1.225788)-float64(1.225784)) // 0.000004  
    f, _ := strconv.ParseFloat(num, 64)
    if f == 0.000004 {
        t.Log("Success")
    } else {
        t.Error("Not Equal", num)
    }

    if getFloat(f) == 0.000004 {
        t.Log("Success")
    }else{
        t.Error("Fail", getFloat(f))
    }
}

func getFloat(f float64) float64 {
    fmt.Println("My Float:",f) //  4e-06
    return f
}
3个回答

8
该符号被称为科学计数法,它是一种方便的方式,以紧凑、简短的形式打印非常小或非常大的数字。
它的形式为:
m × 10ⁿ
(m乘以10的n次幂)
在编程语言中,它被写成/打印为:
m e n
请参见Spec:浮点字面量
您的数字:4e-06,其中m=4,n=-6,这意味着4×10^-6,等于0.000004。

3
为了以常规方式打印浮点数,您可以执行以下示例操作:
package main

import (
    "fmt"
    "strconv"
)


func main() {
    a, _ := strconv.ParseFloat("0.000004", 64)
    b, _ := strconv.ParseFloat("0.0000000004", 64)
    c := fmt.Sprintf("10.0004")
    cc, _ := strconv.ParseFloat(c, 64)
    fmt.Printf("%.6f\n", a)     // 6 numbers after the point
    fmt.Printf("%.10f\n", b)    // 10 numbers afer the point
    fmt.Printf("%.4f\n", cc)    // 4 numbers after the point
}

输出:

0.000004
0.0000000004
10.0004

2

它是相同的数字。如果您不喜欢科学计数法,可以使用fmt.Printf("My Float: %.6f\n",f)。(此格式要求在小数点后打印6个数字。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接