BigDecimal方法发送格式化的数字

时间:2016-01-19 13:39:35

标签: java rounding bigdecimal

我正在尝试将我的大BigDecimals舍入到小数点后三位。例如,假设我有一些

BigDecimal  X = 1362.59633

我想得到:

1362.596

以下是我正在做的事情:

BigDecimal Y = X.round(new MathContext(3));

但我一直这样:1.36E + 3。 在这种情况下我该怎么办? 感谢

6 个答案:

答案 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( ) );