私のアプリでは、通貨のように見える文字列として 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 を表示したくないからです。
2 回目の更新:
人々がこれを重複として閉じ、私の質問に答えない答えを指摘したとは信じられません。そのタイプの人は、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");
}