BigDecimalstring

我有一个BigDecimal对象,我想将其转换为string。 问题是我的价值得分,我得到一个巨大的数字(在长度),我只需要string中的原始数字例如:for

BigDecimal bd = new BigDecimal(10.0001) System.out.println(bd.toString()); System.out.println(bd.toPlainString()); 

输出是:

 10.000099999999999766941982670687139034271240234375 10.000099999999999766941982670687139034271240234375 

而我需要的是string中的数字10.0001

为了得到正好10.0001你需要使用string构造函数或valueOf (基于double的标准表示构造一个BigDecimal):

 BigDecimal bd = new BigDecimal("10.0001"); System.out.println(bd.toString()); // prints 10.0001 //or alternatively BigDecimal bd = BigDecimal.valueOf(10.0001); System.out.println(bd.toString()); // prints 10.0001 

new BigDecimal(10.0001)是这个参数是一个double精度值,碰巧double精度不能正好表示10.0001 。 所以10.0001被“转换”到最接近的可能的双倍,这就是10.000099999999999766941982670687139034271240234375 ,这就是你的BigDecimal显示的。

出于这个原因,使用双重构造函数很less有意义。

您可以在这里阅读更多关于它的信息, 在双精度上移动小数位

你的BigDecimal不包含数字10.0001 ,因为你用double初始化了它,而double没有包含你认为它的数字。 (这是BigDecimal 。)

如果您使用基于string的构造函数 :

 BigDecimal bd = new BigDecimal("10.0001"); 

那么它实际上会包含你期望的数字。

通过使用下面的方法可以将java.math.BigDecimal转换为String。

  BigDecimal bigDecimal = new BigDecimal("10.0001"); String bigDecimalString = String.valueOf(bigDecimal.doubleValue()); System.out.println("bigDecimal value in String: "+bigDecimalString); 

输出:
String中的十进制值: 10.0001

 // Convert BigDecimal number To String by using below method // public static String RemoveTrailingZeros(BigDecimal tempDecimal) { tempDecimal = tempDecimal.stripTrailingZeros(); String tempString = tempDecimal.toPlainString(); return tempString; } 

 // Recall RemoveTrailingZeros BigDecimal output = new BigDecimal(0); String str = RemoveTrailingZeros(output); 

BigDecimal不能是双倍的。 你可以使用Int号码。 如果要显示自己的编号,可以使用BigDecimal的String构造函数。

喜欢这个:

 BigDecimal bd1 = new BigDecimal("10.0001"); 

现在,您可以将bd1显示为10.0001

很简单。 祝你好运。

要使用双重构造函数归档必要的结果,您需要在将BigDecimal转换为String之前舍入BigDecimal

new java.math.BigDecimal(10.0001).round(new java.math.MathContext(6,java.math.RoundingMode.HALF_UP))。toString()

将打印“10.0001”

为了更好地支持不同的语言环境,请使用这种方

 DecimalFormat df = new DecimalFormat(); df.setMaximumFractionDigits(2); df.setMinimumFractionDigits(0); df.setGroupingUsed(false); df.format(bigDecimal); 

你也可以自定义它:

 DecimalFormat df = new DecimalFormat("###,###,###"); df.format(bigDecimal);