Java BigDecimal舍入模式问题
我需要使用BigDecimal roundingmode.xxx和setScale(2)获得这些结果: 其中,RoundingMode.xxx必须与三个给定值相同 我尝试了所有组合,但没有成功,Microsoft Excel成功地设置了三个结果。您正在寻找的 舍入模式向“最近邻”舍入,除非两者都有 邻居是等距的,在这种情况下,四舍五入。表现为 舍入模式。如果丢弃的分数大于0.5;否则,行为 至于RoundingMode.DOWN 例如:Java BigDecimal舍入模式问题,java,bigdecimal,Java,Bigdecimal,我需要使用BigDecimal roundingmode.xxx和setScale(2)获得这些结果: 其中,RoundingMode.xxx必须与三个给定值相同 我尝试了所有组合,但没有成功,Microsoft Excel成功地设置了三个结果。您正在寻找的 舍入模式向“最近邻”舍入,除非两者都有 邻居是等距的,在这种情况下,四舍五入。表现为 舍入模式。如果丢弃的分数大于0.5;否则,行为 至于RoundingMode.DOWN 例如: public static void main(Strin
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
您可以使用:
舍入模式向“最近邻”舍入,除非两者都有
邻居是等距的,在这种情况下,四舍五入。表现为
如果丢弃的分数大于0.5,则进行四舍五入;否则,表现为
把你打倒
请输入:
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);
问题是,当我将两个
BigDecimal
数字相乘时,我得到了一个很大的结果。在那之后,我使用了setScale(2,half-down)
,但没有得到想要的结果
错误的结果
"2.89500004313886165618896484375".setScale(2, BigDecimal.ROUND_HALF_DOWN);
我需要2.89,错误的结果是2.90
使用.round(新的MathContext(2))
我得到了它:
"2.89500004313886165618896484375".round(new MathContext(2));
正确的结果是2.89我们得到了几乎相同的答案xd我不知道会发生什么,但我没有在四舍五入时得到它。我的值为:2.89500004313886165618896484375,使用setScale(..)后,结果为2。90@Al2x(1)从上面的文档链接可以明显看出,大于
0.5
的分数将被四舍五入。(2) 请在问题中包含正确的示例。BigDecimal retFrete=valorTotal.multiply(新的BigDecimal(compPreco.getPc_frete()/100));compPreco.setValorRS_frete(retFrete.setScale(2,BigDecimal.ROUND_HALF_DOWN));getPc_frete=10.0,valorTotal为28.95请尝试使用完整值进行解析:2.89500004313886165618896484375您将得到2.89500004313886165618896484375=>2.90
"2.89500004313886165618896484375".round(new MathContext(2));