這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
四捨六入五成雙是一種比較精確比較科學的計數保留法,是一種數字修約規則,又名銀行家舍入法。它比通常用的四捨五入法更加精確。
具體規則:
-
被修約的數字小於5時,該數字捨去;
-
被修約的數字大於5時,則進位;
-
被修約的數字等於5時,要看5前面的數字,若是奇數則進位,若是偶數則將5舍掉,即修約後末尾數字都成為偶數;若5的後面還有不為“0”的任何數,則此時無論5的前面是奇數還是偶數,均應進位。
助記口訣:
四捨六入五考慮,五後非零就進一,五後為零看奇偶,五前為偶應捨去,五前為奇要進一
Golang中浮點型預設使用銀行家舍入法,如下使用代碼驗證樣本
import ("fmt")func main() {fmt.Printf("9.8249=>%0.2f(四舍)\n", 9.8249)fmt.Printf("9.82671=>%0.2f(六入)\n", 9.82671)fmt.Printf("9.8351=>%0.2f(五後非零就進一)\n", 9.8351)fmt.Printf("9.82501=>%0.2f(五後非零就進一)\n", 9.82501)fmt.Printf("9.8250=>%0.2f(五後為零看奇偶,五前為偶應捨去)\n", 9.8250)fmt.Printf("9.8350=>%0.2f(五後為零看奇偶,五前為奇要進一)\n", 9.8350)}
輸出結果
9.8249 => 9.82(四舍) 9.82671 => 9.83(六入) 9.8351 => 9.84(五後非零就進一) 9.82501 => 9.83(五後非零就進一) 9.8250 => 9.82(五後為零看奇偶,五前為偶應捨去) 9.8350 => 9.84(五後為零看奇偶,五前為奇要進一)
因此,我可以方便得使用fmt的方法對浮點型進行銀行家取捨,取得其近似數。例如:
import ("fmt""strconv")func main() {s := fmt.Sprintf("%0.6f", 17.82671567890123456789987654324567898765432)f, _ := strconv.ParseFloat(s, 64)fmt.Println(s, f)}
輸出結果
17.826716 17.826716