ショッピング モールで見たことがあると思います。
- 合計購入額が 30.01 の場合、30.00 として四捨五入
- 合計購入額が 30.03 の場合、30.05 として丸めます。
- 合計購入額が 30.07 の場合、30.05 として丸めます。
- 合計購入額が 30.08 の場合、30.10 として丸めます。
Javaの丸めと床と天井の機能を知っています。しかし、どうすれば上記のことを達成できますか?デフォルトの機能やユーティリティはありますか?
ショッピング モールで見たことがあると思います。
Javaの丸めと床と天井の機能を知っています。しかし、どうすれば上記のことを達成できますか?デフォルトの機能やユーティリティはありますか?
まず、小売環境(モールなど)で価格を操作する場合は、浮動小数点数や倍数ではなく整数または長整数を使用する必要があります。数値は常に小数点以下2桁であり、小売店で合計を処理する最良の方法は整数値を使用することです。
だから例えば:
30.01f ---> 3001
30.03f ---> 3003
など...これにより、価格値の処理方法が大幅に簡素化されました。その後、独自の価格丸めアルゴリズムを簡単に作成できます。
ここにあなたが望むことを正確に行うべきサンプルのラウンド価格関数があります:
public static int roundPrice(int price) {
String strPrice = String.valueOf(price);
int len = strPrice.length();
int lastDigit = Integer.valueOf( strPrice.substring(len -1) );
int toAdd = -lastDigit;
if(lastDigit > 7)
toAdd = 10 - lastDigit;
else if(lastDigit > 2)
toAdd = 5 - lastDigit;
return price + toAdd;
}
そして、これがあなたがそれをどのように使うことができるかの例です:
public static void main(String[] ars) {
int[] nums = { 3001, 3003, 3007, 3008 };
for(int n : nums) {
System.out.println(roundPrice(n));
}
}
些細な質問なので、なぜ一部のユーザーがあなたの質問にコメントしたのかわかりません。このフォーラムには、あなたが何を望んでいるのかを説明する他の回答がいくつかあるかのように...この質問...StackOverflowの謎!
DecimalFormatをご覧ください。ここの例。
私はこれがあなたが探しているものだと思います:DecimalFormatは探しますRoundingMode