将字符串转换为double总是给我错误的表示

时间:2013-05-16 14:25:15

标签: java string double

我希望使用"0.00071942446044"方法将此字符串Double.parsedouble转换为加倍,但它始终会给出此答案7.1942446044E-4

是否有任何想法将其转换为double,但保持与字符串中的数字相同?

3 个答案:

答案 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能够合理地解释它。

如果您只是想以相同的格式打印,可以使用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)的精确大精度表示(尽管{{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"));