我希望使用"0.00071942446044"
方法将此字符串Double.parsedouble
转换为加倍,但它始终会给出此答案7.1942446044E-4
是否有任何想法将其转换为double,但保持与字符串中的数字相同?
答案 0 :(得分:3)
你可以使用new BigDecimal(myString)
,这不一样但会保持相同的表示。它提供了用于执行不同数学运算的API,但比使用双精度数进行算术运算要慢。
答案 1 :(得分:3)
尽管两个数字完全相同,但您可以使用DecimalFormat以您喜欢的方式操作格式,仅用于演示目的。这是一个例子:
String s = "0.00071942446044";
Double d = Double.parseDouble(s);
DecimalFormat df = new DecimalFormat("#.##############");
System.out.println("double: " + d);
System.out.println("formatted: " + df.format(d));
出局是:
double: 7.1942446044E-4
formatted: 0.00071942446044
请注意,小数点后的#数与示例完全相同。
答案 2 :(得分:1)
这只是显示数字的另一种方式。 The documentation能够合理地解释它。
如果您只是想以相同的格式打印,可以使用printf
或String.format
:
打印0.000719
:
System.out.printf("%f\n", Double.parseDouble("0.00071942446044"));
打印0.00071942446044
:(使用硬编码精度,这可能不明白)
System.out.printf("%.14f\n", Double.parseDouble("0.00071942446044"));
另请注意,数字不是以数字形式存储的,因此您不会获得浮点类型(float
和double
)的精确大精度表示(尽管{{1你可以看到,可以处理这个数字的数字)。请注意使用double
时会发生什么:
打印float
:
7.1942444
System.out.printf("%.7f\n", Float.parseFloat("7.1942446"));
的类似测试用例:(打印double
)
7.1942446044352310
如果你想要更高的精确度(显而易见 - 内存和速度),你应该使用System.out.printf("%.16f\n", Double.parseDouble("7.1942446044352312"));
。