在 double 上强制整数除法?

Force integer division on a double?

我有

x /= y;

其中 x & y 都是 double

我希望 x 是 x/y 的整数部分,我该怎么做?

我试过了

x /= y;
x = x.intValue();

但是我在 TIO 中收到一个 double cannot be dereferenced 错误,我认为这意味着 double x 没有那个方法

IO x = x\y: 进行浮点除法然后舍入到-∞

注意我所要做的就是更改 this code 以添加 \

如果将较小的数据类型分配给较大的数据类型,则不会出现错误。但是从大到小的分配会产生错误。在这种情况下,您需要使用类型转换('x = (Type) y')使这些数据类型相互兼容。将 double 转换为 int 是将较大数据类型 (double) 分配给较小数据类型 (int) 的示例。当我们执行这个操作时,double 变量失去了它的精度并且它的 "integer part" 被分配给 int 变量。

double x = 3, y = 2;
x /= y;
int integerPart = (int) x;
System.out.println(integerPart); // Prints 1

从小到大,数值数据类型如下btw:

byte < short < int < long < float < double

编辑:在您上次编辑后,我明白了您的实际要求。你的第一个表达是错误的。您不想找到 double 除法结果的整数部分,您想要它的下限。只需使用 java.lang.Math.floor:

double[] x = {-10, -7, 1, 3, 7.1, 9.5};
double[] y = {-10, -7, -1.7, 0.5, 7.1, 9.5};
for (int i = 0; i < y.length; i++) {
  for (int j = 0; j < x.length; j++)
    System.out.print(Math.floor(x[j] / y[i]) + " ");
    System.out.println();
}

Force integer division on a double?

强制整数除法,使用intlong(计算部分); long 可能是更好的选择:

x = (double)((long)x / (long)y);

使用显式转换回 double 来强调;如果您愿意,可以将其隐式转换回 double

x = (long)x / (long)y;

请注意 non-zero y 上的 (long)y 可能会导致 0(例如,如果 y0.3) ,然后最终成为 division-by-zero,因此是运行时异常。

I would like x to be the integer part of x/y

这是一个与标题不同的问题;那不是整数除法,而是获取浮点数除法结果的整数部分。如果那是你想要的,只需转换结果:

x = (long)(x / y);

...(当然 long 然后隐式转换回 double)或在其上使用 Math.floor


I have tried

x /= y;
x = x.intValue();

But am receiving a double cannot be dereferenced error

没错。 xdouble,而不是 Double。基元(如 double)没有方法,只有引用类型(如 Double)有。

x = java.lang.Math.floor(x/y);

依靠一些数学函数可以说是最好的选择。 "Returns the largest (closest to positive infinity) double value that is less than or equal to the argument and is equal to a mathematical integer."

如果您需要对称版本(向零截断),则必须处理负商:

 floor(abs(x/y))*signum(x/y)