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

时间:2012-02-27 12:27:34

标签: java parsing format decimal

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

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

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

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

编辑:

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

2 个答案:

答案 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
}

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