在java中将double转换为精确字符串

0 java string type-conversion

我有以下双值

double d = 123456789.8210000000001;
Run Code Online (Sandbox Code Playgroud)

现在我需要将其转换为

String s = "123456789.8210000000001"
Run Code Online (Sandbox Code Playgroud)

究竟.

我使用了以下代码

double d = 123456789.8210000000001d;
DecimalFormat df = new DecimalFormat();
df.setGroupingUsed(false);
df.setMaximumIntegerDigits(20);
df.setMaximumFractionDigits(20);
System.out.println(df.format(d));
Run Code Online (Sandbox Code Playgroud)

但它输出"123456789.821"

当我使用以下代码时

double d = 123456789.8210000000001d;
BigDecimal bd = new BigDecimal(d);
System.out.println(bd.toPlainString());
Run Code Online (Sandbox Code Playgroud)

它给出了123456789.82099999487400054931640625

但我需要确切的价值.

注意:此处整数/小数部分中的位数可以变化.

And*_*bbs 5

只要将值存储123456789.8210000000001在a中double,您的精确表示就会以double的精度丢失.

如果你想保留你的确切数字,你应该使用以下String构造函数BigDecimal:

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