如何解析带有尾号的数字?
示例输入:
Cnt Market Variance % Var.
----- ------- --------------------------
Borr 545 1,253,626,425.65 100.0+
Loan 841 5,102,373,724.22- 100.0-
答案 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。