我有以下双重值
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
但我需要确切的价值。
注意:此处整数/小数部分的位数可能会有所不同。
答案 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