BigDecimal 到 string

我有一个 BigDecimal 对象,我想把它转换成字符串。 问题是我的值得到了分数,我得到了一个巨大的数字(长度) ,我只需要字符串中的原始数字,例如: 为了

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

输出结果是:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375

我需要输出正好是字符串中的数字 10.0001

317137 次浏览

为了精确地得到 10.0001,您需要使用 String 构造函数或者 valueOf(它根据双精度数的规范表示构造一个 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,而且双精度变量不能准确地表示 10.0001。所以 10.0001被“转换”成最接近的双精度,也就是 10.000099999999999766941982670687139034271240234375,这就是你的 BigDecimal所显示的。

因此,使用双重构造函数很少有意义。

你可以在这里了解更多,用双精度移动小数位

您的 BigDecimal不包含数字 10.0001,因为您用 double初始化它,而且 double不包含您认为它包含的数字 没错。(这就是 BigDecimal的全部意义所在。)

如果改用 基于字符串的构造函数:

BigDecimal bd = new BigDecimal("10.0001");

那么它实际上就包含了你所期望的数字。

BigDecimal 不能是双精度的。 你可以用整数。 如果希望精确显示自己的数字,可以使用 BigDecimal 的 String 构造函数。

像这样:

BigDecimal bd1 = new BigDecimal("10.0001");

现在,可以将 bd1显示为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);

产出:
字符串中的 bigDecimal 值: 10.0001 < br/>

// 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 转换为 String 之前对其进行四舍五入。

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

如果您只需要设置精度数量和四舍五入的值,正确的方法是使用它自己的对象。

BigDecimal value = new BigDecimal("10.0001");
value = value.setScale(4, RoundingMode.HALF_UP);
System.out.println(value); //the return should be "10.0001"

面向对象编程(OOP)的支柱之一就是“封装”,这个支柱还说一个对象应该处理它自己的操作,就像这样: