我正在尝试将我的大BigDecimals舍入到小数点后三位。例如,假设我有一些
BigDecimal X = 1362.59633
我想得到:
1362.596
以下是我正在做的事情:
BigDecimal Y = X.round(new MathContext(3));
但我一直这样:1.36E + 3。 在这种情况下我该怎么办? 感谢
答案 0 :(得分:3)
您实际上不必进行回合,但必须设置BigDecimal
的比例:
BigDecimal X = new BigDecimal("1362.59633");
X = X.setScale(3, BigDecimal.ROUND_HALF_UP);
System.out.println(X.doubleValue());
这将打印出1362.596
。
请注意,setScale
会返回一个新的BigDecimal
,因此您必须像我在示例中所做的那样进行分配。
编辑:有几种舍入策略。查看BigDecimal
课程以获取参考。我编辑了我的答案以使用BigDecimal.ROUND_HALF_UP
。
答案 1 :(得分:2)
BigDecimal X = new BigDecimal(1362.59633);
X = X.setScale(3,RoundingMode.HALF_EVEN);
System.out.println(X); //1362.596
请注意,由于BigDecimal对象是不可变的,因此调用此方法 不要导致原始对象被修改,与之相反 通常使用名为setX mutate field X的方法。相反, setScale返回具有适当比例的对象;返回的对象 可能会或可能不会重新分配。
答案 2 :(得分:0)
BigDecimal y= x.round(new MathContext(7, RoundingMode.HALF_EVEN));
这应该适合你。
答案 3 :(得分:0)
如果您只使用double
,则可以
double d = 1362.59633;
double d2 = Math.round(d * 1e3) / 1e3;
System.out.println(d2);
打印
1362.596
注意:这不会创建任何对象来执行舍入。
答案 4 :(得分:0)
我们可以使用DecimalFormat类来定义double数据的格式。你可以定义像 新的DecimalFormat(" ####。000")
我们可以将格式方法称为您想要的值。
实施例 DecimalFormat format = new DecimalFormat(" ####。000"); format.format(" 1362.59633&#34);
答案 5 :(得分:0)
setScale
将比例设置为3,并使用RoundingMode.DOWN
作为要截断的舍入模式toPlainString
以保证返回没有指数字段的字符串表示BigDecimal
上调用toString
并不能保证在没有指数的情况下返回String
。如果需要指数,它使用科学记数法返回字符串表示基于您的问题的示例:
BigDecimal x = BigDecimal.valueOf( 1362.59633 );
System.out.println( x.setScale( 3, RoundingMode.DOWN ).toPlainString( ) );