我有以下情況:我將接收整數并且必須根據以下規則對其進行格式化:
10000 -> 100 // removing the last "00"
10010 -> 100.1 // removing the last "0", and adding a decimal place
10011 -> 100.11 // adding two decimal places
如何做到這一點?提前非常感謝。
uj5u.com熱心網友回復:
使用浮點數
將整數轉換為float64,將其除以100并使用包的%g動詞fmt,它會洗掉尾隨零:
對于浮點值,寬度設定欄位的最小寬度,精度設定小數點后的位數(如果適用),除了 %g/%G 精度設定有效數字的最大數量(洗掉尾隨零) .
為避免“大”數字恢復為%e科學記數法(數字的精度超過 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
使用整數
在不轉換為浮點數的情況下(并依賴于 的尾隨零洗掉%g),這就是您可以使用整數算術的方法:
最后 2 位數字是除以 100 的余數,其余是整數除以 100 的結果。您可以根據余數格式化這兩個數字,如下所示:
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.d\n", q, r)
}
在Go Playground上試試這個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/444572.html
