Java十进制格式 – 与给定的精度一样多

我正在使用DecimalFormat ,我希望能够以给定的精度读取和写入小数(我正在转换为BigDecimal )。

基本上,我想要一个DecimalFormat ,它强制执行以下模式“\ d +(\。\\ d +)?” 即“至少一个数字,然后,可选地,小数分隔符后跟至少一个数字”。

我很难用DecimalFormat来实现它,我尝试了几种模式,但它们似乎强制使用固定的数字。

我也愿意采取其他方式来实现这一目标。

编辑:

对于更多的背景,我正在解析用户提供的数据,其中小数可以以任何方式格式化,并且可能不是以语言环境格式。 我希望让他们提供一个十进制格式的字符串,我可以用它来解析数据。

由于您在评论中注意到您需要Locale支持:

 Locale locale = //get this from somewhere else DecimalFormat df = new DecimalFormat(); df.setDecimalFormatSymbols(new DecimalFormatSymbols(locale)); df.setMaximumFractionDigits(Integer.MAX_VALUE); df.setMinimumFractionDigits(1); df.setParseBigDecimal(true); 

然后解析。

这似乎工作正常:

 public static void main(String[] args) throws Exception{ DecimalFormat f = new DecimalFormat("0.#"); f.setParseBigDecimal(true); f.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));// if required System.out.println(f.parse("1.0")); // 1.0 System.out.println(f.parse("1")); // 1 System.out.println(f.parse("1.1")); // 1.1 System.out.println(f.parse("1.123")); // 1.123 System.out.println(f.parse("1.")); // 1 System.out.println(f.parse(".01")); // 0.01 } 

除了违反“至少一位数”要求的最后两个。 如果真的很重要,您可能需要使用正则表达式单独检查。