2013-09-23 66 views
9

使用Go我試圖找到將浮點數格式化爲字符串的「最佳」方式。我已經找過例子,但是我找不到任何具體回答我的問題。我想要做的就是使用「最佳」方法將浮點數格式化爲字符串。小數位數可能會有所不同,但會是已知的(例如2或4或零)。 我想達到的一個例子如下。 基於下面的例子,我應該使用 fmt.Sprintf() 或 strconv.FormatFloat() 或 別的東西? 和,每個的正常用法和每個之間的區別是什麼?如何使用Go將浮點數格式化爲字符串

我也不懂在當前具有32以下使用32或64的顯着性:

strconv.FormatFloat(float64(fResult), 'f', 2, 32) 

實施例:

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 

    var (
     fAmt1 float32 = 999.99 
     fAmt2 float32 = 222.22 
    ) 

    var fResult float32 = float32(int32(fAmt1*100) +int32(fAmt2*100))/100 

    var sResult1 string = fmt.Sprintf("%.2f", fResult) 

    println("Sprintf value = " + sResult1) 

    var sResult2 string = strconv.FormatFloat(float64(fResult), 'f', 2, 32) 

    println("FormatFloat value = " + sResult2) 

} 
+0

看看[Go,Golang,formatFloat:將浮點數轉換爲字符串](http://stackoverflow.com/a/19101700/562769)。有一個更好的答案。 –

回答

13

fmt.Sprintf都和strconv.FormatFloat使用相同的字符串格式化例程下,所以應該給出相同的結果。

如果數字應該被格式化的精度是可變的,那麼它可能更容易使用FormatFloat,因爲它避免了像使用Sprintf那樣構造格式字符串的需要。如果它永遠不會改變,那麼你可以使用。

FormatFloat的最後一個參數控制值的舍入方式。從文檔:

它舍入 結果假設是由bitSize比特的浮點 值而獲得(32 FLOAT32,64爲float64)的原

所以,如果你使用float32值與您的示例代碼一樣,然後通過32是正確的。

相關問題