强制整数除以双?

时间:2017-12-11 11:36:46

标签: java floor

我有

x /= y;

x& y都是double

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

我试过了

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

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

IO x = x\y:执行浮动除法然后向-∞

舍入

Sample table

注意我要改变this code后添加\

的地板部门

3 个答案:

答案 0 :(得分:4)

  

对double进行强制整数除法?

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

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

使用显式强制转换回double强调;如果您愿意,可以使用隐式强制转换回double来编写它:

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

请注意,非(long)y上的y可能会导致0(例如y0.3),然后结束被零除,因此是一个运行时异常。

  

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

这是一个与标题不同的问题;这不是整数除法,它得到浮点除法结果的整数部分。如果这就是你想要的,只需投射结果:

x = (long)(x / y);

...(当然long会被隐式转回double)或使用Math.floor

  

我试过了

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

但是我收到的双倍不能被解除引用错误

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

答案 1 :(得分:4)

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

依靠某些数学函数可以说是最好的选择。 “返回小于或等于参数且等于数学整数的最大(最接近正无穷大)double值。”

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

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

答案 2 :(得分:3)

如果将较小的数据类型分配给较大的数据类型,则不会出现错误。但是更大到更小的分配给出了错误。在这种情况下,您需要使用类型转换('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

从小到大,数字数据类型如下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();
}
相关问题