go浮点数转字符串保留小数点后N位解决办法

iuoui · · 7868 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景

虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意。这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教

// 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果
func FormatFloat(num float64, decimal int) string {
    // 默认乘1
    d := float64(1)
    if decimal > 0 {
        // 10的N次方
        d = math.Pow10(decimal)
    }
    // math.trunc作用就是返回浮点数的整数部分
    // 再除回去,小数点后无效的0也就不存在了
    return strconv.FormatFloat(math.Trunc(num*d)/d, 'f', -1, 64)
}

其他的一些常用的格式化浮点数的demo

    // 2代表精度,这种方式会有小数点后无效的0的情况
    strconv.FormatFloat(123.123 'f', 2, 64)
    // 效果同上
    fmt.Sprintf("%.2f", 123.123)
    // g可以去掉小数点后无效的0
    fmt.Sprintf("%g", 123.00)
    // 效果同上,可以去掉0,但是达不到保留指定位数的效果
    strconv.FormatFloat(a, 'g', -1, 64)

上面这些例子其实灵活运用一下也可以达到最开始的效果


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:iuoui

查看原文:go浮点数转字符串保留小数点后N位解决办法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7868 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传