我正在尝试使BigDecimal变量中的数字与###。#的格式匹配,无论传递什么数字,它都会显示为###。#
例如,如果我在BigDecimal变量中传递了数字1,则该方法将返回001.0
如果将11.1作为BigDecimal变量传递给我,该方法将返回011.1
我已经有一些代码可以使小数位匹配
BigDecimal x = new BigDecimal(1);
DecimalFormat df = new DecimalFormat("#.0");
String formatted = df.format(x);
因此这将返回1.0,但是在转换回BigDecimal之前,我无法弄清楚如何使前导零出现。
有人可以帮助我或指出正确的方向吗?
谢谢大家
答案 0 :(得分:1)
使用一个NumberFormat
实例,一个Locale
使用点作为小数分隔符。
final BigDecimal x = new BigDecimal("11.1");
final NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
nf.setMinimumFractionDigits(1);
nf.setMaximumFractionDigits(1);
nf.setMinimumIntegerDigits(3);
final String formatted = nf.format(x);
NumberFormat
基本上是一个工厂,因此在这种情况下,getNumberInstance
返回的基础格式化程序是DecimalFormat
。我总是更喜欢从实际实现中抽象出来。
您还可以决定是否要显示分组逗号。
nf.setGroupingUsed(true); // 123,456.0 - default value is true
nf.setGroupingUsed(false); // 123456.0
答案 1 :(得分:0)
使用new DecimalFormat("000.0")
示例
DecimalFormat df = new DecimalFormat("000.0", DecimalFormatSymbols.getInstance(Locale.US));
System.out.println(df.format(new BigDecimal("1"))); // prints: 001.0
System.out.println(df.format(new BigDecimal("11.1"))); // prints: 011.1
System.out.println(df.format(new BigDecimal("123.456"))); // prints: 123.5
System.out.println(df.format(new BigDecimal(".07"))); // prints: 000.1
System.out.println(df.format(new BigDecimal("123456"))); // prints: 123456.0
答案 2 :(得分:-1)
您可以使用apache的StringUtils。
StringUtils.leftPad(number.toString(), 3, '0');
第一个参数是要格式化的字符串,第二个参数是要验证的左数,最后一个参数是complete的字符。
雷鬼。