Java BigDecimal:舍入到最接近的整个值
我需要以下结果
100.12 -> 100.00 100.44 -> 100.00 100.50 -> 101.00 100.75 -> 101.00   .round()或.setScale() ? 我如何去做这件事? 
 您可以使用setScale()将小数位数减less到零。 假设value保留了四舍五入的值: 
 BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP); System.out.println(value + " -> " + scaled); 
 使用round()会涉及多一点,因为它需要您指定要保留的位数。 在你的例子中,这将是3,但是这不适用于所有的值: 
 BigDecimal rounded = value.round(new MathContext(3, RoundingMode.HALF_UP)); System.out.println(value + " -> " + rounded); 
  (请注意, BigDecimal对象是不可变的; setScale和round都会返回一个新对象。) 
如果我去格罗德里格斯的答案
 System.out.println("" + value); value = value.setScale(0, BigDecimal.ROUND_HALF_UP); System.out.println("" + value); 
这是输出
 100.23 -> 100 100.77 -> 101 
这不是我想要的,所以我结束了这个..
 System.out.println("" + value); value = value.setScale(0, BigDecimal.ROUND_HALF_UP); value = value.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("" + value); 
这是我得到的
 100.23 -> 100.00 100.77 -> 101.00 
这就解决了我现在的问题..:)谢谢大家。
这是一个非常复杂的解决scheme,但它的工作原理:
 public static BigDecimal roundBigDecimal(final BigDecimal input){ return input.round( new MathContext( input.toBigInteger().toString().length(), RoundingMode.HALF_UP ) ); } 
testing代码:
 List<BigDecimal> bigDecimals = Arrays.asList(new BigDecimal("100.12"), new BigDecimal("100.44"), new BigDecimal("100.50"), new BigDecimal("100.75")); for(final BigDecimal bd : bigDecimals){ System.out.println(roundBigDecimal(bd).toPlainString()); } 
输出:
100
100
101
101
只要看看:
http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP
和:
 setScale(int precision, int roundingMode) 
或者如果使用Java 6,那么
http://download.oracle.com/javase/6/docs/api/java/math/RoundingMode.html#HALF_UP
http://download.oracle.com/javase/6/docs/api/java/math/MathContext.html
和:
 setScale(int precision, RoundingMode mode); round(MathContext mc); 
我不认为你可以在一个命令中这样做。 尝试
  ArrayList<BigDecimal> list = new ArrayList<BigDecimal>(); list.add(new BigDecimal("100.12")); list.add(new BigDecimal("100.44")); list.add(new BigDecimal("100.50")); list.add(new BigDecimal("100.75")); for (BigDecimal bd : list){ System.out.println(bd+" -> "+bd.setScale(0,RoundingMode.HALF_UP).setScale(2)); } Output: 100.12 -> 100.00 100.44 -> 100.00 100.50 -> 101.00 100.75 -> 101.00 
我testing了其余的例子,它会返回想要的值,但我不能保证它的正确性。
你要
 round(new MathContext(0)); // or perhaps another math context with rounding mode HALF_UP