将Java BigDecimal格式化为0或2位小数的货币

时间:2013-11-06 00:43:26

标签: java string formatting currency

在我的应用中,我需要将BigDecimal对象格式化为看起来像货币的字符串。

E.g。我需要:

  • 45.50以$ 45.50
  • 出来
  • 3.444以3.44美元
  • 出来
  • 0.199以$ 0.20
  • 出来
  • 6.0以$ 6
  • 出现
  • 1200出来$ 1,200

换句话说,我想显示最多2个小数位和最少0个小数位(并且从不只是1位小数)。

舍入应该是通常的方式,其中0.0050轮到0.01和0.0049轮到0。

谢谢!

P.S。我认为我的问题与How to print formatted BigDecimal values?不同,因为我不想为整数显示.00。

第二次更新:

我无法相信人们将此作为副本关闭并指出一个不回答我的问题的答案。那种类型的人慢慢消除了StackOverflow的用处。

以下是我提出的答案,但感觉很难看,我鼓励其他人分享更好的想法:

public static String getCasualDollarFormattedNumber(BigDecimal number)
{
    String showsTwoDecimalPlaces = NumberFormat.getCurrencyInstance().format(number);
    String zeroes = ".00";
    String lastCharacters = showsTwoDecimalPlaces.substring(Math.max(showsTwoDecimalPlaces.length() - zeroes
            .length(), 0));
    return (lastCharacters.equals(zeroes)) ? showsTwoDecimalPlaces.substring(0, 
            showsTwoDecimalPlaces.length() - zeroes.length()) : showsTwoDecimalPlaces;
}

测试:

@Test
public void testGetCasualDollarFormattedNumber()
{
    Assert.assertEquals(Replacer.getCasualDollarFormattedNumber(new BigDecimal(45.50)), "$45.50");
    Assert.assertEquals(Replacer.getCasualDollarFormattedNumber(new BigDecimal(3.444)), "$3.44");
    Assert.assertEquals(Replacer.getCasualDollarFormattedNumber(new BigDecimal(0.199)), "$0.20");
    Assert.assertEquals(Replacer.getCasualDollarFormattedNumber(new BigDecimal(6.0)), "$6");
    Assert.assertEquals(Replacer.getCasualDollarFormattedNumber(new BigDecimal(1200)), "$1,200");
}

0 个答案:

没有答案