Go 语言浮点数 float64 float32 不四舍五入保留指定位数

yufei       4 年, 2 月 前       2053

其实之前也写过好几个版本,不过那些版本最终都是使用 float64 来保存,感觉吧,还是有点不太靠谱。

这次这个版本,索性使用 strings 相关方法,最后结果也保存为 string 类型

func Truncate(f float64, prec int) string {
    n := strconv.FormatFloat(f, 'f', -1, 64)
    if n == "" {
        return ""
    }
    if prec >= len(n) {
        return n
    }
    newn := strings.Split(n, ".")
    if len(newn) < 2 || prec >= len(newn[1]) {
        return n
    }
    return newn[0] + "." + newn[1][:prec]
}

使用方式

package main 

import (
    "strconv"
    "strings"
)

func Truncate(f float64, prec int) string {
    n := strconv.FormatFloat(f, 'f', -1, 64)
    if n == "" {
        return ""
    }
    if prec >= len(n) {
        return n
    }
    newn := strings.Split(n, ".")
    if len(newn) < 2 || prec >= len(newn[1]) {
        return n
    }
    return newn[0] + "." + newn[1][:prec]
}


func main() {
    f := 1.0 / 3.0
    println(Truncate(f,8))
}

不过还有另外一个版本,哈哈

package main 

import (
    "strconv"
    "strings"
)

func Truncate(f float64, prec int) string {
    n := strconv.FormatFloat(f, 'f', -1, 64)
    if n == "" {
        return ""
    }

    ll := len(n)
    if prec >= ll {
        return n
    }

    dotn := strings.Index(n, ".")
    if dotn <= -1 || prec + dotn >= ll  {
        return n 
    }
    return n[:dotn + prec + 1 ]
}


func main() {
    f := 33333330.1234567890
    println(Truncate(f,8))
}
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.