我正在使用DecimalFormat
,我希望能够以给定的精度读取和写入小数(我正在转换为BigDecimal
)。
基本上,我想要DecimalFormat
强制执行以下模式“\ d +(\。\ d +)?”即“至少一个数字,然后,可选地,小数分隔符后跟至少一个数字”。
我很难用DecimalFormat
来实现这个,我尝试了几种模式,但它们似乎强制执行固定的数字。
我也愿意采用其他方法来实现这一目标。
编辑:
对于更多的背景,我正在解析用户提供的数据,其中小数可以以任何方式格式化,并且可能不是以语言环境格式。我希望让他们提供一个十进制格式的字符串,我可以用它来解析数据。
答案 0 :(得分:6)
由于您在评论中指出您需要语言环境支持:
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);
然后解析。
答案 1 :(得分:0)
这似乎工作正常:
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
}
除了最后两个违反“至少一位数”要求的人。如果它非常重要,你可能需要使用正则表达式单独检查它。