[英]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
:执行浮点除法,然后取整为-∞
注意,我要做的就是更改此代码以使用\\
强制对整数进行整数除法?
强制整数除法,使用int
或long
(用于计算部分); long
可能是更好的选择:
x = (double)((long)x / (long)y);
这使用了显式的转换来double
强调。 您可以根据需要将其隐式转换为double
来编写:
x = (long)x / (long)y;
请注意,对非零y
(long)y
可能会导致0
(例如,如果y
为0.3
),则该结果最终被零除,从而导致运行时异常。
我希望x是x / y的整数部分
这个问题与标题不同。 那不是整数除法,而是浮点数除法结果的整数部分。 如果这就是您想要的,只需将结果转换为:
x = (long)(x / y);
...(然后将long
隐式地Math.floor
为double
)或在其上使用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.