golangで金額扱うときに三桁ごとにカンマ区切りするあれがめんどくさかったのでメモ
golangはstringsパッケージにも文字列の反転がないので極力反転もさせず実装してみました。
func cast(price uint32) string {
groupingSize := 3
groupingSeparator := ","
priceStr := fmt.Sprint(price)
size := len(priceStr)
sliceSize := (len(priceStr) + groupingSize - 1) / groupingSize
priceSlice := make([]string, sliceSize)
for i, _ := range priceSlice {
start := size - (sliceSize-i)*groupingSize
end := start + groupingSize
if start < 0 {
start = 0
}
priceSlice[i] = priceStr[start:end]
}
return strings.Join(priceSlice, groupingSeparator)
}
こんな感じになりました。
jsとかrubyとかだったら一行で書けるだろうに冗長的になってしまった。
[追記] tjのgo-configのcodeを追っていたらdustin/go-humanizeというものがでてきて
fmt.Println(humanize.Comma(1234567890))
// output: 1,234,567,890
と出力されるようです。
全然知らなかったのですがスターが500以上ついていたので有名なのでしょうか