去除小數右側多餘的0

從內建的計算機App會發現,計算結果如果為整數時,顯示的資料就只會出現整數(例如 5 + 3 = 8),若計算結果為小數時(例如 5.0000 + 1 = 6),此時只會顯示 6 而不會顯示出 6.0000 或 6.0 這樣的狀況,也就是小數後方多餘的 0 會被刪除。

這種程式要怎麼寫呢,由於目前 String 的標準函數庫中沒有直接可以處理這種狀況的函數,所以必須自己想演算法來處理,參考作法如下。

extension String {
    func trimmingZero() -> String {
        guard self.contains(".") else {
            return self // 此字串中不含「.」
        }

        var text = String(self.reversed())
        text = String(text.trimmingPrefix(/0*\.*/))
        text = String(text.reversed())
        return text
    }
}

print("120".trimmingZero()) // Prints "120"
print("5.300019".trimmingZero()) // Prints "5.300019"
print("6.2000".trimmingZero()) // Prints "6.2"
print("1.000".trimmingZero()) // Prints "1"

這種作法先將字串分為整數與小數兩種,只處理小數,整數直接傳回不用處理。處理小數時先反轉字串,然後用 trimmingPrefix() 配合正規表示法將左側的 0 全部刪除,最後將字串反轉回來就處理完了。

也許有更漂亮的作法,這裡僅為一個參考。

發表迴響