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

5 java format parsing decimal

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

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

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

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

编辑:

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

Sea*_*lly 6

由于您在评论中注意到您需要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);
Run Code Online (Sandbox Code Playgroud)

然后解析.


Mic*_*rdt 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
}
Run Code Online (Sandbox Code Playgroud)

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