有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    BigIntegerAPI中不存在这样的方法

    但是,您可以使用BigInteger::divideAndRemainderjavadoc)实现它,并将结果调整为类似于Math::floorDiv规范

    BigInteger a = new BigInteger("10");
    BigInteger b = new BigInteger("20");
    
    BigInteger c = floorDiv(a, b);
    
    public BigInteger floorDiv(BigInteger a, BigInteger b) {
        // divideAndRemainder returns quotient and remainder in array
        BigInteger[] qr = a.divideAndRemainder(b);  
        return qr[0].signum() >= 0 || qr[1].signum() == 0 ? 
             qr[0] : qr[0].subtract(BigInteger.ONE);
    }
    
  2. # 2 楼答案

    基于Math.floorDiv

    public static BigInteger floorDiv(final BigInteger x, final BigInteger y) {
        if (x.signum() * y.signum() >= 0) {
            return x.divide(y);
        }
        final BigInteger[] qr = x.divideAndRemainder(y);
        return qr[1].signum() == 0 ? qr[0] : qr[0].subtract(BigInteger.ONE);
    }
    
  3. # 3 楼答案

    切换到BigDecimal可以控制舍入。缩放0意味着结果被四舍五入为整数,FLOOR向负无穷大方向四舍五入

    big0.divide(big1, 0, RoundingMode.FLOOR)
    

    (如果从intlongBigInteger构造big0,那么它的规模将已经是0,可以省略中间的参数。)