将 BigDecimal Number 转换为 ###.# 的格式

Converting a BigDecimal Number to the format of ###.#

我正在尝试使 BigDecimal 变量中的数字与 ###.# 的格式匹配,无论传递什么数字,它都会以 ###.#

的形式出现

例如,如果我在 BigDecimal 变量中传递数字 1,该方法将 return 001.0

如果将 11.1 作为 BigDecimal 变量传递给我,该方法将 return 011.1

我已经有了一些使小数位匹配的代码

BigDecimal x = new BigDecimal(1); DecimalFormat df = new DecimalFormat("#.0"); String formatted = df.format(x);

所以这会 return 1.0 但是我不知道如何在转换回 BigDecimal 之前让前导零出现。

有人可以帮助我或指出正确的方向吗?

谢谢大家

可以使用apache的StringUtils

StringUtils.leftPad(number.toString(), 3, '0');

其中第一个参数是要格式化的字符串,第二个参数是要验证的剩余位置数,最后一个参数是完整的字符。

雷格德斯。

使用 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

使用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