保持传递给 BigDecimal 的字符串的值完全相同
Keeping the value of a String passed into a BigDecimal exactly the same
我在数组中有一个 String
,看起来完全像这样:-000000000000256.07
.
我想把它传递给一个 BigDecimal
变量,让它看起来和上面的完全一样; 17 位数字和 2 位小数。我尝试通过以下方式做到这一点:
BigDecimal bd = BigDecimal.valueOf(Double.parseDouble(splitRow[6])).setScale(17, 2);
这给了我结果:-256.07000000000000000
存储在变量中。
如何获得我需要的格式?
您的 BigDecimal
存储实际数值。
打印时,它将 trim 前导 0
s(但保持符号和尾随 0
s),参见 documentation。
您可以做的是根据您的期望格式化 BigDecimal
的 String
表示。
例如:
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
。
In Java BigDecimal 仅保存数值,因此不可能将数字 -000000000000256.07
存储在 BigDecimal
中,所有前导零将被省略。
您可以将其作为 -256.07
存储在 BigDecimal
中,然后使用 DecimalFormat.
再次格式化(当您需要显示时)
示例代码如下所示:
new DecimalFormat("000000000000000.##")
我在数组中有一个 String
,看起来完全像这样:-000000000000256.07
.
我想把它传递给一个 BigDecimal
变量,让它看起来和上面的完全一样; 17 位数字和 2 位小数。我尝试通过以下方式做到这一点:
BigDecimal bd = BigDecimal.valueOf(Double.parseDouble(splitRow[6])).setScale(17, 2);
这给了我结果:-256.07000000000000000
存储在变量中。
如何获得我需要的格式?
您的 BigDecimal
存储实际数值。
打印时,它将 trim 前导 0
s(但保持符号和尾随 0
s),参见 documentation。
您可以做的是根据您的期望格式化 BigDecimal
的 String
表示。
例如:
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
。
In Java BigDecimal 仅保存数值,因此不可能将数字 -000000000000256.07
存储在 BigDecimal
中,所有前导零将被省略。
您可以将其作为 -256.07
存储在 BigDecimal
中,然后使用 DecimalFormat.
示例代码如下所示:
new DecimalFormat("000000000000000.##")