栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否有任何标准库可将float64转换为具有最大有效位数的固定宽度的字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否有任何标准库可将float64转换为具有最大有效位数的固定宽度的字符串?

基本上,您有2种输出格式:科学计数法或常规格式。这两种格式之间的转折点是

1e12

因此,如果可以分支

x >=1e12
。在两个分支中,您都可以使用0个小数位数进行格式化,以查看数字的长度,因此您可以计算12个宽度中可以容纳多少个小数位数,从而可以使用计算出的精度构造最终的格式字符串。

预检查在科学记数法需要太多(

%g
),因为指数的宽度可以变化(例如
e+1
e+10
e+100
)。

这是一个示例实现。这是入门,但这并不意味着要处理所有情况,它也不是最有效的解决方案(但是相对简单,可以完成工作):

// format12 formats x to be 12 chars long.func format12(x float64) string {    if x >= 1e12 {        // Check to see how many fraction digits fit in:        s := fmt.Sprintf("%.g", x)        format := fmt.Sprintf("%%12.%dg", 12-len(s))        return fmt.Sprintf(format, x)    }    // Check to see how many fraction digits fit in:    s := fmt.Sprintf("%.0f", x)    if len(s) == 12 {        return s    }    format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)    return fmt.Sprintf(format, x)}

测试它:

fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,    9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}for _, f := range fs {    fmt.Println(format12(f))}

输出(在Go Playground上尝试):

0.00000000000.12345678901234.56789011234567890121.234568e+129405090880.59.405091e+199.40509e+119


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/471165.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号