【问题标题】:Rounding in JavaJava中的四舍五入
【发布时间】:2012-04-23 14:25:15
【问题描述】:

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

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

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

【问题讨论】:

  • 这是作业吗?如果是这样,请标记为这样。
  • 当您在右上角的搜索框中输入java float round 时,您发现了什么?我得到了五千次点击,您肯定可以在该列表中找到适合的 something :-)
  • 我们真的需要一个“作者根本没有研究并滥用 SO 作为他们的个人 google”的亲密类型......
  • 嗨,paxdiablo,Voo,我已经更新了我的查询,如果可以请尝试找到解决方案。我提出这个问题是为了降低复杂性。

标签: java apache-commons


【解决方案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 之谜!

【讨论】:

    【解决方案2】:

    看看DecimalFormat。示例here

    【讨论】:

      【解决方案3】:

      我想这就是你要找的:DecimalFormat 寻找RoundingMode

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-17
        • 2023-01-12
        • 2012-08-04
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多