将BigDecimal数字转换为###。#的格式

时间:2019-03-01 22:29:36

标签: java methods number-formatting

我正在尝试使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之前,我无法弄清楚如何使前导零出现。

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

谢谢大家

3 个答案:

答案 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的字符。

雷鬼。