我正在尝试将输入流转换为对象,并且在将以下字符串转换为bigdecimal时遇到了麻烦。我得到87.00,因为0被忽略。我正在尝试分数。任何帮助都将受到赞赏。谢谢!
例如。0087必须转换为00.87
您似乎在注释中指出的是,初始字符串"0087"
是一个定点表示,有两个小数位,因此在最后两位数字之前有一个隐式小数点。您可以通过几种方法将其转换为相应的BigDecimal
,但是我自己会这样做:
BigDecimal result = BigDecimal.valueOf(Long.parseLong("0087"), 2);
这里的关键是要了解BigDecimal
s具有两个特征属性:十进制数字的任意长度序列,以及 scale 传达最不重要的数字的位置值,形式小数点右侧的数字数量。上面演示的特定工厂方法接受这些方法是单独的参数,尽管仅当数字字符串足够短以表示为long
时才起作用。2
直接对应于输入中的(隐式)分数数字。
输出结果BigDecimal
作为" 00.87"而不是" 0.87"是一个单独的问题,但是如果您确实想要的话,可行。
尝试此代码
String str="0087";
int pos=str.lastIndexOf("0");
String resultat=str.substring(0,pos+1);
resultat+=".";
resultat+=str.substring(pos+1);
System.out.println(resultat);
new BigDecimal(resultat);