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