Java 保持传入BigDecimal的字符串值完全相同

Java 保持传入BigDecimal的字符串值完全相同,java,format,double,bigdecimal,Java,Format,Double,Bigdecimal,我在一个数组中有一个字符串,它看起来就像这样:-000000000000256.07 我想把它传递到一个BigDecimal变量中,使其看起来与上面的一样;17位数字和2个小数点。我试着通过以下方式来实现: BigDecimal bd=BigDecimal.valueOf(Double.parseDouble(splitRow[6])).setScale(17,2) 这将给出结果:-256.07000000000000000存储在变量中 如何获取所需的格式?您的BigDecimal存储实际的数值

我在一个数组中有一个
字符串
,它看起来就像这样:
-000000000000256.07

我想把它传递到一个
BigDecimal
变量中,使其看起来与上面的一样;17位数字和2个小数点。我试着通过以下方式来实现:

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

这将给出结果:
-256.07000000000000000
存储在变量中


如何获取所需的格式?

您的
BigDecimal
存储实际的数值

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

您可以做的是根据您的期望格式化
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
注意

  • 指定的格式适用于特定的宽度
  • 如果使用此格式,具有不同宽度的数值
    字符串
    将明显打印不同的内容
  • 如果您想要一个可靠的解决方案来保持精确的
    字符串
    表示,请使用
    字符串
    ,并且仅在需要执行实际计算时才使用
    BigDecimal
在Java中只保存数值,因此无法将数字
-000000000000256.07
存储在
BigDecimal
中,所有前导零都将被写入

您可以改为将其存储为
-256.07
格式的
BigDecimal
,然后使用重新格式化(需要显示时)

示例代码如下所示:

new DecimalFormat("000000000000000.##")

如果您不能使用此格式将其存储在
BigDecimal
中,则所有前导的
0
都将被忽略和删除。您了解
setScale
的功能吗?目标是什么?我从CSV获取它,对数字执行计算,然后将其写入一个新的CSV,该CSV必须与该格式匹配。将计算与在新CSV中的表示方式分开。