【问题标题】:Java String parseFloat or double for x.xxxxxx numbers?对于 x.xxxxxx 数字,Java String parseFloat 还是 double?
【发布时间】:2015-03-14 19:06:16
【问题描述】:

我在字符串中有数字,例如:

"34.556231"
"43.385644"
"65.659388"

点后有六位小数。

我想将它们解析为 Float 或最终 Double。

如何将这些字符串转换为浮点数或双精度数?

当我使用Float.parseFloat("5.586905") 时,浮点值等于5.58691,所以看起来它只解析到小数点后 5 位并四舍五入。

如何解决?

【问题讨论】:

  • 确实float只有6/7位,而5.58691 6位。

标签: java string parsing floating-point type-conversion


【解决方案1】:

float 没有足够的精度来存储你给它的数字。请改用double

正如 java 规范所说,

与 byte 和 short 的建议一样,使用浮点数(而不是 double) 如果您需要在大型浮点数组中保存内存 点数

换句话说,除非存储是一个主要问题,否则不要使用float。它比double 精确得多,并且会导致像您刚刚概述的那样荒谬的结果。

使用Double.parseDouble

【讨论】:

    【解决方案2】:

    如果小数点后有更多数字,则可以像这样使用 bigdecimal

    String x="5.586905";
        BigDecimal b=new BigDecimal(x);
                double value=b.doubleValue()            ;
        System.out.println(value);
    

    但是根据你给定的数字Double.parseDouble() 就足够了

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2011-10-19
      • 2017-10-12
      • 1970-01-01
      相关资源
      最近更新 更多