先看下如下代碼:
double dTest=82.545d;
DecimalFormat format=new DecimalFormat("0.00");
System.out.println(format.format(dTest));
你覺(jué)得會(huì)輸出什么?82.55?還是82.54?
再試下這段代碼:
double dTest=82.535d;
DecimalFormat format=new DecimalFormat("0.00");
System.out.println(format.format(dTest));
你覺(jué)得會(huì)輸出什么?82.53?還是82.54?
先別猜,自己運(yùn)行下……
或者有人認(rèn)為這是DecimalFormat的一個(gè)BUG?
不是的,這其實(shí)是IEEE754標(biāo)準(zhǔn)規(guī)定的一種“to even”的四舍五入的方法,即:
該方法在省略數(shù)據(jù)只有一個(gè)5的情況下,需要看前面一位。若為偶數(shù)則省略,若為奇數(shù)則進(jìn)位,也就是偶數(shù)優(yōu)先。
IEEE754規(guī)定了如下的幾種四舍五入的標(biāo)準(zhǔn),分別舉例說(shuō)明其意義:
“away from zero” 例:3.215 -> 3.22,-3.215 -> -3.22
“towards zero” 例:3.215 -> 3.21,-3.215 -> -3.21
“to even” 例:3.215 -> 3.22,3.245 -> 3.24
“towards positive infinity” 例:3.215 -> 3.22,-3.215 -> -3.21
“towards negative infinity” 例:3.215 -> 3.21,-3.215 -> -3.22
我們常規(guī)意義上的“四舍五入”是“away from zero”的方式。
posted on 2008-11-17 16:50
foxinsky 閱讀(2231)
評(píng)論(2) 編輯 收藏