)Math.Round() — c# 與 java的區別

來源:互聯網
上載者:User

http://hi.baidu.com/yk±±¼«ÐÇ/blog/item/7b949acc2690595a0fb345f0.html

 

 

明明知道,java與c#在很多方面都有很多不同,但是如果讓詳細描述,卻不一定能說出來多少。

前段時間碰見一個問題,才恍然大悟般的,明白了一條不同。

有同事的同學筆試,有道題目是 Math.Round(11.5) 與Math.Round(-11.5)的值。

一個同事是java的,直接答道,不就是12和-11麼。

另外一個同事是搞.Net的,寫了個程式,結果是12和-12。

咦?結果怎麼不一樣?

分別查了java協助文檔和MSDN協助文檔,才發現,原來,是標準不同引起的。

java的Round,是+0.5取整,所以,結果當然是12和-11了。

而.net的不同,而且描述也負責的多。在它的備忘裡,有這麼一條說明:

此方法的行為遵循 IEEE 標準 754 的第 4 節。這種舍入有時稱為就近舍入或銀行家舍入。

哦,到此為止,終於明白了,為什麼會不同。但是,什麼又是銀行家舍入呢?

找了半天,才找到解釋說明:

對於0-9這10個數字來說,他們出現在某一位的幾率是相等的。在金融結算中,如果單純的使用四捨五入,那麼,入參(5-9)會比舍參(0-4)多一個,也就是說,金融機構會虧本,考慮到這種情況,也為了舍入更加公平,出現了就近舍入。既然每一位出現0-9的幾率相等,那麼,該位是偶數還是奇數的幾率也就相等,對於捨棄位,0-4舍,6-9進沒有什麼疑義,主要就在於對中間數5的處理。此時,決定5是否捨棄交由它的前一位決定,如果前一位是偶,則捨棄,如果前一位是奇,則進位,如此,就實現了大致公平的舍入處理。

按照銀行家舍入,考慮11.5和-11.5, 對於11.5,5前邊是奇數1,故進位,結果為12;對於-11.5,變成了-12。因此,該舍入應該叫做四捨六入五向偶法。

原來如此。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.