我需要使用BigDecimal roundingmode.xxx和setScale(2)获得这些结果:
(5.789).setScale(2, RoundingMode.xxx) = 5.79
(2.894).setScale(2, RoundingMode.xxx) = 2.89
(2.895).setScale(2, RoundingMode.xxx) = 2.89
对于三个给定值,RoundingMode.xxx 必须相同。
我尝试了所有组合,但没有成功,Microsoft Excel将这三个结果设置为成功。
答案 0 :(得分:4)
您可以使用ROUND_HALF_DOWN
:
舍入模式向“最近邻居”舍入,除非两者都是 邻居是等距的,在这种情况下向下舍入。表现为 如果丢弃的分数> 1,则ROUND_UP 0.5;否则,表现得像 ROUND_DOWN。
您的意见:
static void roundTo(BigDecimal input)
{
BigDecimal output = input.setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(input + " => " + output);
}
roundTo(new BigDecimal("5.789"));
roundTo(new BigDecimal("2.894"));
roundTo(new BigDecimal("2.895"));
这会产生:
5.789 => 5.79
2.894 => 2.89
2.895 => 2.89
编辑:根据您的意见,以下内容可能对您有用:
BigDecimal output = input.setScale(3, BigDecimal.ROUND_HALF_DOWN).setScale(2, BigDecimal.ROUND_HALF_DOWN);
答案 1 :(得分:1)
舍入模式向“最近邻居”舍入,除非两者都是 邻居是等距的,在这种情况下向下舍入。表现为 RoundingMode.UP如果丢弃的分数是> 0.5;否则,表现 至于RoundingMode.DOWN。
示例:
public static void main(String args []){
System.out.println(new BigDecimal("5.789").setScale(2, RoundingMode.HALF_DOWN));
System.out.println(new BigDecimal("2.894").setScale(2, RoundingMode.HALF_DOWN));
System.out.println(new BigDecimal("2.895").setScale(2, RoundingMode.HALF_DOWN));
}
输出
5.79
2.89
2.89
答案 2 :(得分:0)
问题是,当我将两个BigDecimal
数字相乘时,我得到了一个很大的结果。之后我使用setScale(2, HalfDown)
但没有得到理想的结果。
结果错误
"2.89500004313886165618896484375".setScale(2, BigDecimal.ROUND_HALF_DOWN);
我需要2.89而错误的结果是2.90
使用.round(new MathContext(2))
我明白了:
"2.89500004313886165618896484375".round(new MathContext(2));
正确的结果是2.89