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

时间:2014-07-16 09:04:22

标签: java string type-conversion

我有以下双重值

double d = 123456789.8210000000001;

现在我需要将其转换为

String s = "123456789.8210000000001"

准确。

我使用了以下代码

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

但它给出了输出" 123456789.821"

当我使用以下代码时

double d = 123456789.8210000000001d;
BigDecimal bd = new BigDecimal(d);
System.out.println(bd.toPlainString());

它给出123456789.82099999487400054931640625

但我需要确切的价值。

注意:此处整数/小数部分的位数可能会有所不同。

2 个答案:

答案 0 :(得分:5)

只要将值123456789.8210000000001存储在double中,您的确切表示就会以精确度为双精度丢失。

如果您想保留确切的数字,则应使用String的{​​{1}}构造函数:

BigDecimal

答案 1 :(得分:0)

当您将其定义为double时,将发生更改。使用BigDecimal

    BigDecimal val = new BigDecimal("123456789.8210000000001");
    String str=val.toString();
    System.out.println(str);

现在,您将获得与String

相同的内容

输出:

   123456789.8210000000001