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);