3

在我的代码中,我想在没有任何舍入或求幂的情况下插入 db ..但是当我使用 sop 作为 2.631578947368421E-7 时,它会在我的 java 代码中转换

以下是我使用的代码:

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

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

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

4

3 回答 3

8

使用 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()打印时也使用不使用科学计数法。

于 2013-02-04T11:44:29.550 回答
1

BIgDecimal 四舍五入。

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

于 2013-02-04T23:17:34.090 回答
1

您可以使用 MathContext.UNLIMITED。

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

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

于 2013-02-04T11:48:06.787 回答