有没有更好的方法将Double转换为精确的十进制字符串?

我尝试了很多方法使用String.format()和DecimalFormater将Double转换为精确的十进制字符串,到目前为止我发现了这个:

String s = "-.0000000000000017763568394002505"; Double d = Double.parseDouble(s) * 100; System.out.println((new java.text.DecimalFormat("###########################.################################################################################")).format(d)); 

( https://ideone.com/WG6zeC )

我并不是我的解决方案的粉丝,因为制作一个不能涵盖所有案例的巨大模式对我来说很难看。

你还有另一种方法吗?
我真的想要所有的小数, 没有科学的符号没有尾随零

谢谢

PS:我需要这个没有外部库和Java 1.7。

似乎你必须要处理一些精确度。 double不适合此用途。 更好地使用BigDecimal

 String value="13.23000"; BigDecimal bigD=new BigDecimal(value); System.out.println(bigD); System.out.println(bigD.stripTrailingZeros().toPlainString()); 

new BigDecimal("0.1")new BigDecimal(0.1)之间存在很大差异。 使用String构造函数可能会导致尾随零,并且在解析字符串时会失去舍入为double的效果。 如果目标是打印double的确切值,则需要使用BigDecimal的双构造函数。 在double中进行任何算术,而不是BigDecimal。

 import java.math.BigDecimal; public class Test { public static void main(String[] args) { String s = "-.0000000000000017763568394002505"; double d = Double.parseDouble(s) * 100; System.out.println(new BigDecimal(d).toPlainString()); } } 

试试这段代码:您也可以使用toString()方法,但它使用科学记数法。 https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#toPlainString()

 BigDecimal bd = new BigDecimal("-.0000000000000017763568394002505"); System.out.println(bd.toPlainString());