在 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?
强制整数除法,使用int
或long
(计算部分); long
可能是更好的选择:
x = (double)((long)x / (long)y);
使用显式转换回 double
来强调;如果您愿意,可以将其隐式转换回 double
:
x = (long)x / (long)y;
请注意 non-zero y
上的 (long)y
可能会导致 0
(例如,如果 y
是 0.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
没错。 x
是 double
,而不是 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)
我有
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?
强制整数除法,使用int
或long
(计算部分); long
可能是更好的选择:
x = (double)((long)x / (long)y);
使用显式转换回 double
来强调;如果您愿意,可以将其隐式转换回 double
:
x = (long)x / (long)y;
请注意 non-zero y
上的 (long)y
可能会导致 0
(例如,如果 y
是 0.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
没错。 x
是 double
,而不是 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)