【问题标题】:Rounding a number up in Java [duplicate]在Java中四舍五入[重复]
【发布时间】:2011-12-17 00:40:08
【问题描述】:

我不明白如何将数字四舍五入到某些小数位 我到处找都试过了

目前我有我的程序来四舍五入到一个整数 double rACT = Math.ceil(ACT); double rSAT = Math.ceil(SAT); double rGPA = Math.ceil(GPA);

但我需要将其四舍五入到小数点后 2 位

仅供参考 - 我是一名高中生,我真的不需要超级复杂的东西 要做到这一点,因为我需要我的方法少于 15 我可以浪费任何行

【问题讨论】:

标签: java double rounding


【解决方案1】:

可能有一种更简单的方法,但显而易见的是:

double rSAT = Math.ceil(SAT * 100) / 100;

这会将像 2.123 这样的数字转换为 212.3,将其四舍五入为 213,然后将其除回为 2.13。

【讨论】:

  • 实际上,调用Math.ceil() 会将数字212.3 舍入到213。在数学中,上限函数会将任何大于整数的数字四舍五入为下一个可用的整数,因此即使 212.0003 也会四舍五入为 213。您可以使用Math.round(),它执行标准舍入功能,等效于Math.floor(decimal + 0.5)
  • @izuriel - 该问题指定了四舍五入的数字向上(他们也使用Math.ceil)。修正了我的解释,但说它会将 212.3 舍入到 213。
  • 我的看法是,他在问如何对数字进行四舍五入,并给出了他能够想出的解决方案。无论哪种方式,您都明确指出在212.3 上调用Math.ceil() 将产生212,这是不正确的,这是我通知您该错误的主要重点。
【解决方案2】:

通常,最好在渲染数字时进行舍入(例如,作为字符串)。这样,数字可以以最高精度存储/传递,并且信息只会在向用户显示时被截断。

此代码最多四舍五入到小数点后两位并使用上限。

double unrounded = 3.21235;
NumberFormat fmt = NumberFormat.getNumberInstance();
fmt.setMaximumFractionDigits(2);
fmt.setRoundingMode(RoundingMode.CEILING);

String value = fmt.format(unrounded);
System.out.println(value);

【讨论】:

    【解决方案3】:

    这个问题之前有人问过,看看How to round a number to n decimal places in Java

    在我看来,最简单的解决方案是 chris:

    double myNum = .912385;
    int precision = 10000; //keep 4 digits
    myNum= Math.floor(myNum * precision +.5)/precision;
    

    【讨论】:

    • 为什么是Math.floor(x + 0.5) 而不仅仅是Math.ceil(x)
    • 添加 0.5 因为,例如如果数字是 1.4 -> 1.4 + 0.5 = 1.9 ,如果数字是 1.6 -> 1.6+0.5 = 2.1 floor(2.1) = 2 所以四舍五入以这种方式工作
    • 不妨使用专为它设计的函数进行四舍五入 (Math.ceil)。
    【解决方案4】:

    如果您正在寻找数字的字符串表示,您可以执行以下操作:

    DecimalFormat df = new DecimalFormat("#.00");
    System.out.println(df.format(12.912385));
    

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      相关资源
      最近更新 更多