繁体   English   中英

强制对整数进行整数除法?

[英]Force integer division on a double?

我有

x /= y;

其中xy均为double

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

我努力了

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

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

IO x = x\\y :执行浮点除法,然后取整为-∞

样品表

注意,我要做的就是更改此代码以使用\\

强制对整数进行整数除法?

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

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

这使用了显式的转换来double强调。 您可以根据需要将其隐式转换为double来编写:

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

请注意,对非零y (long)y可能会导致0 (例如,如果y0.3 ),则该结果最终被零除,从而导致运行时异常。

我希望x是x / y的整数部分

这个问题与标题不同。 那不是整数除法,而是浮点数除法结果的整数部分。 如果这就是您想要的,只需将结果转换为:

x = (long)(x / y);

...(然后将long隐式地Math.floordouble )或在其上使用Math.floor


我努力了

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

但是我收到一个不能被取消引用的错误

对。 x是一个double ,而不是Double 基元(如double )没有方法,只有引用类型(如Double )有方法。

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

依靠某些数学函数可以说是最佳选择。 “返回小于或等于自变量且等于数学整数的最大(最接近正无穷大)双精度值。”

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

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

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

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

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

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM