4

我想 "0.00071942446044"通过使用Double.parsedouble方法将此字符串转换为双精度,但它总是给出这个答案7.1942446044E-4

有没有办法将其转换为双精度但保持与字符串中相同的数字?

4

3 回答 3

3

您可以使用new BigDecimal(myString),这不一样,但会保持相同的表示。它提供了用于执行不同数学运算的 API,但比使用双精度数进行算术运算要慢。

于 2013-05-16T14:31:35.857 回答
3

Although both numbers are exactly the same, you could use DecimalFormat to manipulate the format in a way you like, only for presentation purpose. Here is an example:

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)); 

The out is:

double: 7.1942446044E-4
formatted: 0.00071942446044

Note that the number of # after decimal point is exactly the same as your example.

于 2013-05-16T14:37:10.243 回答
1

这只是显示数字的另一种方式。该文档做了一个合理的工作来准确地解释它。

如果您只是想以相同的格式打印它,您可以使用printfString.format

打印0.000719

System.out.printf("%f\n", Double.parseDouble("0.00071942446044"));

打印0.00071942446044:(具有硬编码的精度,这可能不是主意)

System.out.printf("%.14f\n", Double.parseDouble("0.00071942446044"));

另请注意,数字不是以数字形式存储的,因此您不会获得浮点类型 (floatdouble) 的精确大精度表示(尽管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"));

如果您想要更高的精度(显然是有代价的 - 内存和速度),您应该使用BigDecimal.

于 2013-05-16T14:38:05.770 回答