大十进制到字符串

2022-08-31 13:56:25

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

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

输出为:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375

我需要out put正好是字符串中的数字10.0001


答案 1

要获得确切的信息,您需要使用 String 构造函数 or (它基于双精度值的规范表示形式构造 BigDecimal):10.0001valueOf

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

问题在于,参数是 a,并且碰巧双精度不能准确表示。因此,被“转换”为最接近的双倍,这就是你所展示的。new BigDecimal(10.0001)double10.000110.000110.000099999999999766941982670687139034271240234375BigDecimal

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

你可以在这里阅读更多关于它的信息, 将小数位移到双精度值


答案 2

您的 不包含该数字,因为您用 a 初始化了它,而 它并没有完全包含您认为它包含的数字。(这就是 的全部意义所在。BigDecimal10.0001doubledoubleBigDecimal

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

BigDecimal bd = new BigDecimal("10.0001");

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