我有
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后添加\
答案 0 :(得分:4)
对double进行强制整数除法?
要强制整数除法,请使用int
或long
(对于计算部分); long
可能是更好的选择:
x = (double)((long)x / (long)y);
使用显式强制转换回double
强调;如果您愿意,可以使用隐式强制转换回double
来编写它:
x = (long)x / (long)y;
请注意,非(long)y
上的y
可能会导致0
(例如y
为0.3
),然后结束被零除,因此是一个运行时异常。
我希望x是x / y的整数部分
这是一个与标题不同的问题;这不是整数除法,它得到浮点除法结果的整数部分。如果这就是你想要的,只需投射结果:
x = (long)(x / y);
...(当然long
会被隐式转回double
)或使用Math.floor
。
我试过了
x /= y; x = x.intValue();
但是我收到的双倍不能被解除引用错误
右。 x
是double
,而不是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();
}