首先問一下round(0.825,2) 返回的結果,大家猜一猜,
首先sql server 返回的是 0.83
js的返回結果 是0.83,code 如下:
var b = 0.825; alert(math.round(b * 100) / 100); 其實js中可以 直接用tofixed函式的,
var b = 0.825; alert(b.tofixed(2));
這樣也返回0.83
可是c# 返回的是0.82
這裡並不是我們期望的0.83, 為什麼了? 其實c#中的math.round()並不是使用的"四捨五入"法 而是四捨六入五取偶(銀行家演算法 banker's rounding),若需要捨入到的位的後面"小於5"或"大於5"的話,按通常意義的四捨五入處理.若"若需要捨入到的位的後面"等於5",則要看捨入後末位為偶數還是奇數.
math.round(1.25, 1) = 1.2 因為5前面是2,為偶數,所以把5捨去不進製 math.round(1.35, 1) = 1.4 因為5前面是3,為奇數,所以進製.
為了解決這個 問題,微軟提供了其他的api
網上有人說 這個api 計算小數時有問題, 其實我們可以自己實現round 函式,
public static decimal round(decimal d, int decimals)
或者如下,
public static decimal round(decimal d, int decimals)
如果我們現在需要 用js 來實現 銀行家演算法,又該怎麼實現了
number.prototype.round =function (len) }}var b1 = a1 / math.pow(10
, len);
return
b1;}
number.prototype.oldtofixed =number.prototype.tofixed;
number.prototype.tofixed =function (len)
else
}
四捨五入 銀行家演算法
對於 四捨五入 的概念,相信大家都熟悉,因為小學三四年級就已經接觸過了,常規演算法這兒從略。但對於銀行家演算法,也許有不少人比較生疏。近期學習中遇到了,也了解一下演算法可以概括為 四捨六入五取偶 那就是 假設對小數部分進行捨入的話 待捨入的部分恰好為0.5000,則需要看前面一位數的奇偶性,奇數則入...
Oracle中新增銀行家四捨五入
1 銀行家四捨五入是用於銀行計算無法獲取最小單位的值時採取的方法 其實很好理解 武功秘籍如下 四捨六入五考慮,五後非零就進一,五後為零看奇偶,五前為偶應捨去,五前為奇要進一 2 實操 將下面的語句放到資料庫中執行 create or replace function round2 p1 in num...
oracle中round 四捨五入
語法 round函式 語法為round number,num digits 其中number是需要進行四捨五入的數字 num digits為指定的位數,按此位數進行四捨五入,如果num digits大於 0,則四捨五入到指定的小數字,如果num digits等於 0,則四捨五入到最接近的整數,如果n...