【问题标题】:Operator in Java like // in python?Java中的运算符类似于python中的//?
【发布时间】:2014-11-30 19:43:48
【问题描述】:

是否有一种我可以在 java 中使用的在 python 中使用的 // 运算符形式,或者某种解决方法? 10 // 3 = 3

【问题讨论】:

  • 10 / 3 将具有相同的行为。如果两个操作数都是 int(或 long),Java 会执行整数除法

标签: java python operators


【解决方案1】:

在 python 3 中,// 默认作为楼层划分。

在 python 2.2 和更高版本的 2.X 版本中,我们可以从__future__ 导入它

>>> from __future__ import division
>>> 10/3
3.3333333333333335
>>> 10//3
3

在 Java 中: 浮点变量或值除法时,答案的小数部分用浮点变量表示。

float f = 10.0f / 6.0f; // result is 1.6666
double d = 10.0 / 9.0; // result is 1.1111

但是对于java中的地板:

(int)Math.floor(10/3);

【讨论】:

    【解决方案2】:
    public static int python_like_divisor(int x, int y) {
        final remainder = x % y;
        if(remainder != 0) {
            return (x - remainder) / y;
        }
        return x / y;
    }
    

    一些基本的数学知识很好;)

    对于浮点(float、double 等)值,此方法将无法正常工作。

    【讨论】:

      【解决方案3】:

      需要注意的一点是:

      在 python 3 中:

      6 // -132 = -1

      在java中:

      6 / -132 = 0

      【讨论】:

      • 对于python中的整数除法,我们需要:math.trunc(a / float(b))
      • 非常令人惊讶的是,似乎很少有人意识到这一点 - Python 整数除法(旧的或新的)从来没有像 C/Java 整数除法,除非只有非你宇宙中的负整数。
      【解决方案4】:

      Java 的整数除法的作用与 Python 中的 // 运算符相同。这意味着这样的事情:

      (int) 9/4 == 2 is True
      

      这里的强制转换甚至是不必要的,因为 9 和 4 都是整数。如果一个是浮点数或双精度数,则此转换是必要的,因为 java 将不再将此语句作为整数除法执行。更明确地说,你可以这样做

      (int)Math.floor(9 / 4);
      

      先将数字相除,然后将结果取最接近的整数。

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 2014-06-20
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多