2

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

例如我需要:

  • 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。

谢谢!

PS 我认为我的问题与如何打印格式化的 BigDecimal 值不同?因为我不想为整数显示 .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");
}
4

0 回答 0