Java BigDecimal到字符串的转换在小数点之前添加一个零

Java BigDecimal到字符串的转换在小数点之前添加一个零,java,string,bigdecimal,Java,String,Bigdecimal,在我的代码中,如果我转换一个字符串,例如 String str = ".12"; String str2 = "0.12" 对于Bigdecimal,两者都给出了0.12的输出。我的输出要求我不更改符号-有没有一种方法可以从字符串进行BigDecimal转换,在这种情况下不为.12添加0?当它保持0.12到0.12时,我没事 我只希望Bigdecimal保持字符串输入的原样,不添加零,也不删除零 我正在这样做: Bigdecimal bd = new Bigdecimal(str); bd.t

在我的代码中,如果我转换一个字符串,例如

String str = ".12";
String str2 = "0.12"
对于Bigdecimal,两者都给出了0.12的输出。我的输出要求我不更改符号-有没有一种方法可以从字符串进行BigDecimal转换,在这种情况下不为.12添加0?当它保持0.12到0.12时,我没事

我只希望Bigdecimal保持字符串输入的原样,不添加零,也不删除零

我正在这样做:

Bigdecimal bd = new Bigdecimal(str);
bd.toString() gives me 0.12
正如你所看到的,圆点将整数部分与分形部分分开。因此,在您的情况下,0被添加为整数部分,因为您只传递一个fractionPart,希望这有助于:

如果可以,您可以为BigDecimal创建一个子类,如:

class CustomBigDecimal extends BigDecimal{

String originalValue;

public CustomBigDecimal(String str) {
    super(str);
    originalValue=str;
}

public String toString(){
    return originalValue;

}
}
然后像这样使用它:

CustomBigDecimal cbd1 = new CustomBigDecimal("0.12");
System.out.println(cbd1);
CustomBigDecimal cbd2 = new CustomBigDecimal(".12");
System.out.println(cbd2);
输出:

0.12
.12

一种方法是格式化从toString返回的字符串并手动删除前导零:


bd.toString.replaceFirst ^0\\

我得出的结论是,这不能使用任何格式或使用Bigdecimal类的函数来完成。我能找到的唯一方法就是打印出原始字符串。但仍在等待答案。正如您所发现的,无法使BigDecimal不输出小数点前面的单个0。BigDecimal不跟踪原始字符串,因此它不知道是否存在前导0,它只将其解析为其内部表示形式。所以,是的,你唯一的解决办法就是自己跟踪字符串。丹尼尔,谢谢你的回复。你说我只传递了一个fractionPart,你能给我指一个同时包含这两个部分的函数吗?嗨,Lchukka,我已经更新了我的问题。请看一看。我的答案也被编辑了。这应该会有所帮助。