C 四捨五入與實際應用不符

2021-06-18 09:31:46 字數 1105 閱讀 3380

decimal d1 = 12.5m;//結果12

decimal d2 = 13.5m;//結果14

messagebox.show(d1.tostring()+"整形後:"+convert.toint32(d1).tostring()+"\n"+d2.tostring()+"整形後:"+convert.toint32(d2).tostring());

效果:

引用:c#採用的是「四捨六入五成雙」的方法,所以4舍6入不用說了,末位是5的情況得看倒數第二位加一後是幾,像上面的情況就是:(12.5)2+1=3 取偶數,加一後不是偶數,所以取不加一的值12; (13.5)3+1=4 加一後是偶數,所以值是14; 

解決,用math.roun方法:

decimal d1 = 12.5m;//結果12

decimal d2 = 13.5m;//結果14

decimal d11 = math.round(d1, 0, midpointrounding.awayfromzero);// 13 midpointrounding.awayfromzero,末位是5的時候,取進一位的值,也就是 四捨六入5取偶中,進一位和不進製(絕對值)哪個大,這裡是12和13比較,那必須是13了,實際我們需要的也是進製後的數

decimal d22 = math.round(d2, 0, midpointrounding.awayfromzero);//14

messagebox.show(d1.tostring() + "整形後:" + convert.toint32(d1).tostring() + "math方法後的值:" + d11.tostring() + "\n" + d2.tostring() + "整形後:" + convert.toint32(d2).tostring() + "math方法後的值:" + d22.tostring());

效果:

c 四捨五入

在處理一些資料時,我們希望能用 四捨五入 法實現,但是c 採用的是 四捨六入五成雙 的方法,如下面的例子,就是用 四捨六入五成雙 得到的結果 double d1 math.round 1.25,1 1.2double d2 math.round 1.24,1 1.2double d3 math.ro...

c 四捨五入

math.round跟conver.toint32一樣,都是使用四捨六入五成雙的規則,例如 math.round 3.2 返回3 math.round 3.6 返回4 math.round 3.5 返回4 math.round 2.5 返回2 要做到四捨五入,可加上引數midpointroundin...

C 四捨五入

在處理一些資料時,我們希望能用 四捨五入 法實現,但是c 採用的是 四捨六入五成雙 的方法,如下面的例子,就是用 四捨六入五成雙 得到的結果 double d1 math.round 1.25,1 1.2double d2 math.round 1.24,1 1.2double d3 math.ro...