-4

我想你在购物中心看到过,他们会在你的总购买金额中扣除或增加一些金额,例如,

  • 如果您的总购买量为 30.01,则四舍五入为 30.00
  • 如果您的总购买量为 30.03,则四舍五入为 30.05。
  • 如果您的总购买量为 30.07,则四舍五入为 30.05。
  • 如果您的总购买量为 30.08,则四舍五入为 30.10。

我知道 Java 中的舍入、地板和 ceil 函数。但是我怎样才能实现上述目标呢?是否有任何默认功能或实用程序可用?

4

3 回答 3

1

首先,当您在零售环境(如商场)中操纵价格时,您应该使用整数或长整数,而不是浮点数或双精度数,因为该数字始终为 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));
        }
    }

我不知道为什么有些用户评论了你的问题,因为这是一个微不足道的问题,好像在这个论坛上还有其他几个回答可以解释你想要什么......我什至无法弄清楚你为什么得到 -5这个问题... StackOverflow之谜!

于 2012-04-29T14:58:53.643 回答
0

看看DecimalFormat这里的例子。

于 2012-04-11T09:36:13.223 回答
0

我认为这就是您要查找的内容:DecimalFormat查找RoundingMode

于 2012-04-11T09:37:33.873 回答