亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用小數位的整數條件格式

使用小數位的整數條件格式

Go
慕村225694 2022-11-23 14:22:31
我有以下情況:我將收到整數并且必須根據以下規則格式化它們:10000 -> 100 // removing the last "00"10010 -> 100.1 // removing the last "0", and adding a decimal place10011 -> 100.11 // adding two decimal places 如何做到這一點?非常感謝。
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

使用浮點數

將整數轉換為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 的結果。您可以根據余數格式化這 2 個數字,如下所示:


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試試這個。


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號