如何在golang中读取float符号?

时间:2016-12-18 20:16:48

标签: go

从结构图中打印出一些值。我看到某些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 个答案:

答案 0 :(得分:6)

符号称为Scientific notation,它是以紧凑,简短的形式打印非常小或非常大的数字的便捷方式。

它具有

的形式
  

m ×10 n

m 十次提升到 n 的力量)

在编程语言中,它被编写/打印为:

  

e 名词

请参阅Spec: Floating-point literals

您的号码:4e-06,其中m=4n=-6,表示4*10 -6 等于{{1 }}

答案 1 :(得分: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 :(得分:1)

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