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