从结构图中打印出一些值。我看到某些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
}
答案 0 :(得分:6)
符号称为Scientific notation,它是以紧凑,简短的形式打印非常小或非常大的数字的便捷方式。
它具有
的形式m ×10 n
( m 十次提升到 n 的力量)
在编程语言中,它被编写/打印为:
米
e
名词的
请参阅Spec: Floating-point literals。
您的号码:4e-06
,其中m=4
和n=-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位数。)