BigDecimal到字符串

Yo *_* Al 61 java string bigdecimal

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

BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());
Run Code Online (Sandbox Code Playgroud)

输出是:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375
Run Code Online (Sandbox Code Playgroud)

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

ass*_*ias 114

要准确获取,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
Run Code Online (Sandbox Code Playgroud)

问题new BigDecimal(10.0001)是参数是a double并且碰巧双精度不能完全代表10.0001.因此10.0001被"转变"为最接近的双倍,这就是10.000099999999999766941982670687139034271240234375你的BigDecimal表演.

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

你可以在这里阅读更多相关内容,将小数位移到一个双精度数


T.J*_*der 11

BigDecimal不包含这个数字10.0001,因为你用a初始化它double,并且它double完全包含你认为它的数字.(这是整点BigDecimal.)

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

BigDecimal bd = new BigDecimal("10.0001");
Run Code Online (Sandbox Code Playgroud)

...然后它实际上会包含您期望的数字.


Ate*_*etc 9

为了更好地支持不同的语言环境,请使用以下方式:

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

df.format(bigDecimal);
Run Code Online (Sandbox Code Playgroud)

您也可以自定义它:

DecimalFormat df = new DecimalFormat("###,###,###");
df.format(bigDecimal);
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

输出:
String中的bigDecimal值:10.0001