服務熱線
153 8323 9821
先聲明這個是在.NET環境下的,Java等語言并不是一樣的.
今天遇到個問題,項目需要數字四舍五入。立即想到Math.Round這個函數,在我的印象中它就是個四舍五入的函數,想都沒想就套用上去了。
結果我在測試的時候發現實際上并不是這樣的。我測試的數據為0.4,0.6,0.5和1.5。發現其結果和預想的結果大不相同。0.4和0.6這個不用說沒問題分別返回了0和1,沒錯。奇怪的是0.5這個值居然返回的是0,我一琢磨難道Math.Round函數是五舍六入不成??于是看了下1.5的返回值,按我上一步的推斷應該返回1,結果恰恰返回了2!
這回蒙了~ 馬上打開網頁,在MSDN上需求答案,果不其然!Math.Round這個函數的解釋是將雙精度浮點值按指定的小數位數舍入,并不就是四舍五入。這種舍入有時稱為就近舍入或四舍六入五成雙。(直接調果然不行~),那怎么辦呢?繼續往下看,如果 a 的小數部分正好處于兩個整數中間,其中一個整數為偶數,另一個整數為奇數,則返回偶數。 這句話什么意思呢?
我是看了半天也沒看明白,小數部分正好處于2個整數之間??難道小數部分后面還有數?那是什么數阿,反正我是沒理解,沒辦法只能自己敲代碼實驗:
Math.Round(0.4) //result:0
Math.Round(0.6) //result:1
Math.Round(0.5) //result:0
Math.Round(1.5) //result:2
Math.Round(2.5) //result:2
Math.Round(3.5) //result:4
Math.Round(5.5) //result:6
Math.Round(6.5) //result:6
Math.Round(8.5) //result:8
Math.Round(9.5) //result:10
大家看出來了沒,我就從就近舍入或四舍六入五成雙這句話來理解,就近舍入?沒說清楚,四舍五入!嗯,沒錯0.4和0.6結果都符合要求,那么五成雙什么意思呢?我也不太明白,那就看上面的數據!發現沒,離小數位最近整數值,或者說當舍入位前面一位的值,如果是偶數的話,它就進1,如果是奇數的話,就舍!~原來是這樣。
上一篇:c# 四舍五入、上取整、下取整