2013-09-23 64 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是正确的。

相关问题