go浮點數轉字符串保留小數點後N位解決辦法

最近在項目中碰到不少次float轉string,同時要求保留小數點後幾位,而且去掉小數點後0的場景code

雖然問題很簡單,可是隔了挺久沒處理這種場景就有些生疏了,本身也搜了一下,不少回答都不太滿意。這裏貼一下本身的作法,若是有更好的解決辦法的話,還請多多指教orm

// 主要邏輯就是先乘,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)
}

其餘的一些經常使用的格式化浮點數的democi

// 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)

上面這些例子其實靈活運用一下也能夠達到最開始的效果string

相關文章
相關標籤/搜索