保持传递给 BigDecimal 的字符串的值完全相同



我在一个看起来像这样的数组中有一个String-000000000000256.07.

我想把它传递到一个BigDecimal变量中,看起来和上面一模一样;17位数字和2个小数点。我尝试通过以下方式做到这一点:

BigDecimal bd = BigDecimal.valueOf(Double.parseDouble(splitRow[6])).setScale(17, 2);

这给了我结果:-256.07000000000000000存储在变量中。

如何获得所需的格式?

在JavaBigDecimal中只保存数值,因此不可能将数字-000000000000256.07存储在BigDecimal中,所有前导零都将被省略。

您可以改为将其-256.07存储在BigDecimal中,然后使用DecimalFormat再次格式化(当您需要显示它时)。

示例代码如下所示:

new DecimalFormat("000000000000000.##")

您的BigDecimal存储实际的数值。

打印时,它将修剪前导0s(但保留符号和尾随0s),请参阅文档。

你可以做的是按照你的期望格式化BigDecimalString表示。

例如:

String s = "-000000000000256.07";
BigDecimal bd = new BigDecimal(s);
//                 |start of format
//                 ||keep sign
//                 |||leading 0s
//                 ||||width
//                 |||| |decimal width
//                 |||| |   |newline
//                 |||| |   | 
System.out.printf("%+019.2f%n", bd.doubleValue());

输出

-000000000000256.07

注意

  • 指定的格式适用于特定宽度。
  • 如果使用此格式,具有不同宽度的数字String显然会打印不同。
  • 如果需要可靠的解决方案来保持精确的String表示形式,请使用String,并且仅在需要执行实际计算时使用BigDecimal

最新更新