我正试图格式化一些数字作为货币,与逗号和2个小数位。我找到了“github.com/dustin/go-humanize“作为逗号,但它不允许指定小数位数。Sprintf将执行货币和十进制格式设置,但不执行逗号格式设置。
for _, fl := range []float64{123456.789, 123456.0, 123456.0100} {
log.Println(humanize.Commaf(fl))
}
结果:
123,456.789
123,456
123,456.01
我期待:
$123,456.79
$123,456.00
$123,456.01
3条答案
按热度按时间nwwlzxa71#
这就是humanize.FormatFloat()的作用:
在您的案例中:
话虽如此,正如LenW所评论的那样,
float
(in Go,float64
)并不适合货币。参见floating-point-gui.de。
使用像
go-inf/inf
(以前的go/dec
,例如在这个货币实现中使用)这样的包会更好。参见12月去:
Dec
类型包含Format()
方法。自2015年7月以来,您现在有来自Kyoung-chan Lee (
leekchan
)的**leekchan/accounting
**,具有相同的建议:请不要使用
float64
来数钱。当您对浮点型执行操作时,它们可能会出现错误。强烈建议使用
big.Rat
(〈Go 1.5)或big.Float
(〉= Go 1.5)。(记帐支持float64
,但这只是为了方便。)7gcisfzg2#
有一篇很好的博客文章关于为什么你永远不应该在这里使用浮点数来表示货币-http://engineering.shopspring.com/2015/03/03/decimal/
从他们的例子中,你可以:
将为您带来:
yruzcnhs3#
输出为12.34