使用舍入时在bigdecimal中使用不同的构造函数有什么区别。运行以下代码时:
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四舍五入时是否还有其他差异?
答案 0 :(得分:3)
为什么使用字符串构造函数进行舍入会产生与其他结果不同的结果?
因为这是唯一一次实际传递的值恰好是4.645。剩下的时间,你传递的double
值接近4.645,这不是实际上 4.645 - 它是4.644999999999999573674358543939888477325439453125。
您可以使用BigDecimal.valueOf(double)
创建有效解析BigDecimal
值的规范字符串表示的double
值 - 然后您将获得相同的结果至于String
。