如何用尾号解析数字?

时间:2018-09-11 12:04:48

标签: java

如何解析带有尾号的数字?

示例输入:

Cnt    Market Variance  % Var.
----- ------- --------------------------
Borr     545    1,253,626,425.65  100.0+
Loan     841    5,102,373,724.22- 100.0-

1 个答案:

答案 0 :(得分:3)

我知道的最简单的方法是提供两种模式-一种用于正数,一种用于负数:

    DecimalFormat decimalFormat = ((DecimalFormat) NumberFormat.getInstance(Locale.US));
    decimalFormat.applyPattern("#,##0.00;#,##0.00-");

    System.out.println(decimalFormat.parse("6.4+"));    // Double 6.4
    System.out.println(decimalFormat.parse("724.22-")); // Double -724.22

可以和BigDecimals一样获得

    DecimalFormat decimalFormat = ((DecimalFormat) NumberFormat.getInstance(Locale.US));
    decimalFormat.applyPattern("#,##0.00;#,##0.00-");
    decimalFormat.setParseBigDecimal(true);

    System.out.println(decimalFormat.parse("6.4+"));    // BigDecimal 6.4
    System.out.println(decimalFormat.parse("724.22-")); // BigDecimal -724.22

警告

模式取决于语言环境。跳过区域设置可能会产生不可预测的影响。

    DecimalFormat decimalFormat = new DecimalFormat("#,##0.00;#,##0.00-");
    System.out.println(decimalFormat.parse("6.4+"));    // Long 6 WRONG!
    System.out.println(decimalFormat.parse("724.22-")); // Long 724 WRONG!

    DecimalFormat decimalFormat = new DecimalFormat("#,##0.00;#,##0.00-",
            DecimalFormatSymbols.getInstance(Locale.US));
    System.out.println(decimalFormat.parse("6.4+"));    // 6.4
    System.out.println(decimalFormat.parse("724.22-")); // -724.22

提示

您可以解析指定起始位置的数字,而无需应用子字符串操作

    String line = "Borr     545    1,253,626,425.65  100.0+";
    System.out.println(decimalFormat.parse(line, new ParsePosition(16))); // 1253626425.65
    System.out.println(decimalFormat.parse(line, new ParsePosition(34))); // 100.0

不要问我为什么需要用ParsePosition包装int。