Java 将BigDecimal四舍五入到*始终*有两位小数

Java 将BigDecimal四舍五入到*始终*有两位小数,java,math,bigdecimal,rounding,Java,Math,Bigdecimal,Rounding,我试图将大的十进制值四舍五入到小数点后两位 我正在使用 BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING)); logger.trace("rounded {} to {}", value, rounded); 但它并没有始终如一地满足我的要求: rounded 0.819 to 0.82 rounded 1.092 to 1.1 rounded 1.365 to 1.4 // should be

我试图将大的十进制值四舍五入到小数点后两位

我正在使用

BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING));
logger.trace("rounded {} to {}", value, rounded);
但它并没有始终如一地满足我的要求:

rounded 0.819 to 0.82
rounded 1.092 to 1.1
rounded 1.365 to 1.4 // should be 1.37
rounded 2.730 to 2.8 // should be 2.74
rounded 0.819 to 0.82

我不关心有效数字,我只需要两位小数。如何使用BigDecimal实现这一点?或者是否有其他类/库更适合这种情况?

如果您真的想要取整,您可以使用取整模式。这确实符合我的要求。区别仅仅在于
round()
使用有效数字,而
setScale
使用固定的小数位数,还是更多?使用RoundingMode.HALF_进行“典型舍入”。也就是说,1.111表示1.11[上限表示1.12]感谢
RoundingMode.HALF\u UP
。根据文件,这是学校普遍教授的四舍五入法——我需要这种方法。如果你的值像在会计应用程序中一样为负值,请小心。您可能需要使用RoundingMode.UP而不是ceiling为什么
setScale(…)
工作?看见
value = value.setScale(2, RoundingMode.CEILING)