0
使用舍入時使用不同構造函數的bigdecimal有什麼區別?當運行下面的代碼:BigDecimal使用字符串和(int,long,double)構造函數進行舍入差異
public class RoundTest {
/**
* @param args
*/
public static void main(String[] args) {//2.425
BigDecimal intv = new BigDecimal(4.645);
BigDecimal doublev = new BigDecimal(4.645);
BigDecimal strV = new BigDecimal("4.645");
BigDecimal longV = new BigDecimal(4.645);
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_UP));
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_EVEN));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_UP));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_EVEN));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_UP));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_EVEN));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_UP));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_EVEN));
}
}
輸出是:
Int - 4.64
Int - 4.64
Int - 4.64
Double -4.64
Double -4.64
Double -4.64
**String - 4.65**
String - 4.64
String - 4.64
Long - 4.64
Long - 4.64
Long - 4.64
爲什麼四捨五入使用字符串構造給出不同的結果比其他人呢?在使用BigDecimal四捨五入時是否還有其他差異?
不清楚爲什麼你有'intv'和'longv' - 它們與'doublev'完全一樣,因爲你在所有情況下調用'BigDecimal(double)'構造函數。 – 2015-01-21 10:23:20