1 回答

TA貢獻(xiàn)1856條經(jīng)驗 獲得超17個贊
使用浮點數(shù)
將整數(shù)轉(zhuǎn)換為float64,除以100并使用包的%g動詞fmt,它刪除尾隨零:
對于浮點值,寬度設(shè)置字段的最小寬度,精度設(shè)置小數(shù)點后的位數(shù)(如果適用),除了 %g/%G 精度設(shè)置最大有效數(shù)字位數(shù)(尾隨零被刪除) .
為避免“大”數(shù)字恢復(fù)為%e科學(xué)記數(shù)法(大于默認(rèn)精度的數(shù)字,即 6 %g),明確指定寬度,如下所示:
fmt.Printf("%.12g\n", float64(v)/100)
測試它:
for _, v := range []int{
10000, 10010, 10011,
10000000, 10000010, 10000011,
10000000000, 10000000010, 10000000011,
} {
fmt.Printf("%.12g\n", float64(v)/100)
}
這將輸出(在Go Playground上嘗試):
100
100.1
100.11
100000
100000.1
100000.11
100000000
100000000.1
100000000.11
使用整數(shù)
在不轉(zhuǎn)換為浮點數(shù)的情況下(并依賴于 的尾隨零刪除%g),這就是使用整數(shù)運算的方法:
最后 2 位是除以 100 的余數(shù),其余是整數(shù)除以 100 的結(jié)果。您可以根據(jù)余數(shù)格式化這 2 個數(shù)字,如下所示:
switch q, r := v/100, v%100; {
case r == 0:
fmt.Println(q)
case r%10 == 0:
fmt.Printf("%d.%d\n", q, r/10)
default:
fmt.Printf("%d.%02d\n", q, r)
}
在Go Playground試試這個。
- 1 回答
- 0 關(guān)注
- 115 瀏覽
添加回答
舉報