英文:
Go fmt float64 issue
问题
我在理解go fmt包方面遇到了一个小问题。
它与以下代码有关:
import "fmt"
func main() {
var smallFloat float64 = 0.123456789
var bigFloat float64 = 123456789000
fmt.Println(fmt.Sprintf("%f", smallFloat))
fmt.Println(fmt.Sprintf("%f", bigFloat))
}
输出结果为:
0.123457
123456789000.000000
我不想使用科学计数法,所以认为%f符合我的需求。我从格式化页面(https://golang.org/pkg/fmt/)上看到,它说:
%e和%f的默认精度为6;对于%g,它是最小的数字位数,足以唯一标识该值。
有没有办法可以使用fmt包,使我能够表示smallFloat的完整小数值,同时又不在bigFloat的末尾添加6个零?
英文:
I've come across a bit of a gotcha in my noob understanding of go fmt package
It relates to the following code:
import "fmt"
func main() {
var smallFloat float64 = 0.123456789
var bigFloat float64 = 123456789000
fmt.Println(fmt.Sprintf("%f", smallFloat))
fmt.Println(fmt.Sprintf("%f", bigFloat))
}
The output is:
0.123457
123456789000.000000
I don't want to use scientific notation so thought %f would suit my needs.I can see from the formatting page (https://golang.org/pkg/fmt/) it says:
The default precision for %e and %f is 6; for %g it is the smallest number of digits necessary to identify the value uniquely.
Is there a way I can use the fmt package that would allow me represent the full decimal value of smallFloat while at the same time not appending 6 zeros to the end of bigFloat?
答案1
得分: 5
你可以使用strconv.FormatFloat
,将prec设置为-1:
fmt.Println(strconv.FormatFloat(big, 'f', -1, 64))
fmt.Println(strconv.FormatFloat(small, 'f', -1, 64))
输出结果为:
123456789000
0.123456789
Playground: http://play.golang.org/p/7p8xnQ_BzE.
英文:
You can use strconv.FormatFloat
with prec set to -1:
fmt.Println(strconv.FormatFloat(big, 'f', -1, 64))
fmt.Println(strconv.FormatFloat(small, 'f', -1, 64))
prints
123456789000
0.123456789
Playground: http://play.golang.org/p/7p8xnQ_BzE.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论