Java处理具有E的双值[关闭]

Posted

技术标签:

【中文标题】Java处理具有E的双值[关闭]【英文标题】:Java Dealing with Double values having E [closed] 【发布时间】:2015-03-07 20:06:49 【问题描述】:

假设我有:

    double Nc= 7.6695805E-4;
    NumberFormat formatter = new DecimalFormat("0.00000000000");
    String string = formatter.format(Nc);
    System.out.println(string);

输出将是:

    0.00076695805

但它是放在字符串类型变量中的! 我要做的是将它转换为双精度或浮点数或长整数,以便它应该保持与 0.00076695805 相同,以便我可以将它用于我的计算! 我试过的是:

    double Nc= 7.6695805E-4;
    NumberFormat formatter = new DecimalFormat("0.00000000000");
    String string = formatter.format(Nc);
    System.out.println(Double.parseDouble(string));

输出变成:

    7.6695805E-4 //which is same as i gave

那么应该怎么解决呢!

【问题讨论】:

您可能会将双原语与其字符串表示混淆——它们是完全不同的两件事,一个不会影响另一个。解决方案是在需要显示时控制双精度的字符串表示形式。 How to round a number to n decimal places in Java 的可能重复项 【参考方案1】:

您可能会混淆双原语及其字符串表示形式——它们是完全不同的两件事,一个不会影响另一个。解决方案是在需要显示时控制双精度的字符串表示。

解决方法是在需要使用double的时候使用double,但是打印的是格式化的String,而不是从String中得到的double。所以不是:

double Nc= 7.6695805E-4;
NumberFormat formatter = new DecimalFormat("0.00000000000");
String string = formatter.format(Nc);
System.out.println(Double.parseDouble(string));

请注意,double 没有使用它创建的 String 的内存,也不应该是 double != String。

所以,改为:

double nc= 7.6695805E-4; // variable names begin with lower-case
NumberFormat formatter = new DecimalFormat("0.00000000000");
String string = formatter.format(nc);
System.out.println(string);

double nc= 7.6695805E-4; // variable names begin with lower-case
NumberFormat formatter = new DecimalFormat("0.00000000000");
System.out.println(formatter.format(nc));

【讨论】:

【参考方案2】:

使用 BigDecimal。 1java文档

BigDecimal bd = new BigDecimal("String")

【讨论】:

以上是关于Java处理具有E的双值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何理解导致 MySQL 函数中截断不正确的双值错误的原因?

将文件中的双值数字读入 C++ 中的向量并访问它们的值

java转换二进制/本地/十六进制双值

具有双值的 Java MethodOverloading 错误

我可以处理 UITabbarController 中的双击吗

Java和C#中双值的低级实现