BigDecimal四舍五入..但我不想要任何舍入

时间:2013-02-04 11:42:30

标签: java bigdecimal

在我的代码中,我想插入到db而不进行任何舍入或取幂..但是当我使用sop为2.631578947368421E-7

时,它会在我的java代码中转换

以下是我使用的代码:

BigDecimal a =new BigDecimal(0.0000002631578947368421052631578947368421052632,MathContext.DECIMAL64);
System.out.println(a);

我只是希望它能够保持原样,因为我想做一些计算。

请给我一个合适的解决方案。

3 个答案:

答案 0 :(得分:8)

构造大小数using a String,否则输入的常量在作为参数传递给BigDecimal的构造函数之前会被舍入。

所以写下这样的东西:

BigDecimal a =new BigDecimal("0.0000002631578947368421052631578947368421052632");
System.out.println(a.toPlainString());

所有人都应该工作。

编辑:你也应该摆脱构造函数的第二个参数 static MathContext.DECIMAL64表示:A MathContext object with a precision setting matching the IEEE 754R Decimal64 format, 16 digits, and a rounding mode of HALF_EVEN, the IEEE 754R default.

EDIT2:打印时也使用a.toPlainString()不使用科学记数法。

答案 1 :(得分:1)

  

BIgDecimal四舍五入。

不,不是。 BigDecimal与此无关。常数值0.0000002631578947368421052631578947368421052632正在四舍五入。它不能完全用浮点表示。如果你想要一个具有此值的精确BigDecimal,请使用new BigDecimal(String).

答案 2 :(得分:0)

您可以使用MathContext.UNLIMITED。

BigDecimal a =new BigDecimal(0.0000002631578947368421052631578947368421052632,MathContext.UNLIMITED);
System.out.println(a);
System.out.println(a.toPlainString());

当您打印值时,您可以使用BigDecimal.toPlainString()返回“没有指数字段的此BigDecimal的字符串表示形式”。