带有 java.text.DecimalFormat 的可选加号

Cim*_*man 6 java number-formatting

我想用加号、减号或无符号解析 Java 中的十进制数,并获取BigDecimal. 这可以通过调用构造函数来实现new BigDecimal(string)。它为以下所有字符串生成适当的结果:

"1", "12", "123", "123.0", "+123.0", "-123.0", "+123", "-123"
Run Code Online (Sandbox Code Playgroud)

但是,我需要根据特定的语言环境来解析字符串,即使用逗号小数分隔符。有没有办法根据特定语言环境解析所有这些数字?

我试过了NumberFormatDecimalFormat但无法正确配置它。

final DecimalFormat valueParser = (DecimalFormat) NumberFormat.getNumberInstance(new Locale("cs"));
valueParser.setParseBigDecimal(true);
Run Code Online (Sandbox Code Playgroud)

这样valueParser不接受加号。有一个选项可以将模式设置为DecimalFormat。但是,可以在模式中将加号指定为可选吗?

wer*_*ero 8

您可以创建接受或更好地需要前导“+”的 DecimalFormat。

    DecimalFormat f (DecimalFormat)NumberFormat.getNumberInstance(new Locale(...));
    f.setPositivePrefix("+");
    f.parse("+123");
Run Code Online (Sandbox Code Playgroud)

但是前缀不是可选的,因此它对您的情况没有帮助。作为一个非常简单的解决方案,为什么不在将字符串传递给 DecimalFormats 解析方法之前检查(修剪后的)字符串是否以“+”字符开头,并且在这种情况下切割前导“+”。

  • 哦那些傻瓜,为什么将 0 格式化为“+0”,0 既不是正数也不是负数 (3认同)