我需要以下结果
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
.round()
还是.setScale()
?我该怎么做呢?
发布于 2010-11-09 21:29:38
您可以使用setScale()
将小数位数减少到零。假设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
都将返回一个新对象。)
发布于 2010-11-09 21:51:37
如果我按照Grodriguez的回答
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
这解决了我现在的问题..:)谢谢大家。
发布于 2010-11-09 21:33:58
简单地看一下:
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);
https://stackoverflow.com/questions/4134047
复制相似问题