【问题标题】:Parse String to Integer/Long/Float/Double将字符串解析为 Integer/Long/Float/Double
【发布时间】:2018-10-11 15:25:59
【问题描述】:

我正在尝试正确解析数字的字符串表示形式。 Parser 为我提供了数值 Integer/Long/Float/Double 但是当我尝试使用 NumberFormat 解析时:

String number = "1.0";
NumberFormat.getNumberInstance().parser(number);

它返回一个 Long 类型。但是,当我尝试解析“1.1”时,它会正确推断出 Double(为什么不浮动?)。 我应该编写自己的数字解析器还是有可能以正确推断类型的方式对其进行调整。整数作为整数(不是长整数)。浮动为浮动(不是双精度)。 Long 和 Double 一样 Double。

【问题讨论】:

  • 你需要这个做什么?如果你解析一个字符串,你会想把它分配给某个东西……那么你想把它分配给什么类型的变量呢?
  • 1.0 在 java 中是 double 的。对于浮点数,您必须使用 1.0f 表示
  • 如果您使用 NumberFormat 解析字符串,它将返回一个 Number 实例。之后,您可以键入检查 Number instanceof Integer/Long/Float/Double 是否。然后你知道它是什么类型的数字,所以你可以调用 Number.intValue() 等等。我知道如何做到这一点并且它正在工作。我只需要调整它以便正确解析。我看到了带有自定义解析器规则的 DecimalFormat,但这是最后的手段。
  • @user2207495,首先你需要什么样的数字格式?如果它只是小数的问题,那么你应该可以使用 double 和 long ,而无需担心其余的!然后它变得非常简单,如果用例是特定的,例如货币或百分比等等,那么您应该在 NumberFormat 类中挖掘更多内容,否则使用最简单的方法就可以了。

标签: java type-deduction


【解决方案1】:

为什么不使用 java 的内置数字解析器?

Double.parseDouble() Float.parseFloat() Integer.parseInt()

等等……

编辑:

查看您的评论后,您可以尝试使用此

    String number = "1.0";
    if (isInteger(number)) {
        //parse Int
    } else if (isDouble(number)){
        //parse Double
    }

以及方法:

public static boolean isInteger(String s) {
    try {
        Integer.parseInt(s);
    } catch (NumberFormatException e) {
        return false;
    }
    return true;
}

public static boolean isDouble(String s) {
    try {
        Double.parseDouble(s);
    } catch (NumberFormatException e) {
        return false;
    }
    return true;
}

public static boolean isFloat(String s) {
    try {
        Float.parseFloat(s);
    } catch (NumberFormatException e) {
        return false;
    }
    return true;
}

【讨论】:

  • 因为我不知道类型。这是一个字符串。
  • 可以使用instanceof
  • 啊非易失性。我明白你在做什么。
  • 你可以尝试制作方法然后catchNumberFormatException
  • 通过抛出和捕获异常进行解析是不行的。正如我在上面的评论中所说,我知道如何在不抛出异常或手动解析的情况下解析它。 NumberFormat 就是为此而设计的。我只想调整 NumberFormat 以使其正常运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2014-05-11
相关资源
最近更新 更多