Java 双除法合成整数

Java 双除法合成整数,java,Java,我正在尝试实现此操作: 360/1000000=0.00000036 90 / 0.00000036 = 250000000 这是到目前为止我的代码- int n = 1000000; double ex_angle = 360 / (double) n; int res = 90 / ex_angle; System.out.println ("res: " + res); 我的IDE不允许我写int-res=90/ex\u-angle,这是合乎逻辑的,因为ex\u-a

我正在尝试实现此操作:

360/1000000=0.00000036
90 / 0.00000036 = 250000000
这是到目前为止我的代码-

int n = 1000000;
double ex_angle = 360 / (double) n;
int res = 90 / ex_angle;
System.out.println ("res: " + res);
我的IDE不允许我写
int-res=90/ex\u-angle
,这是合乎逻辑的,因为
ex\u-angle
double
res
int
。 但我也不能这么做-

int res = 90 / (int) ex_angle
因为此强制转换将导致“零除异常”


有人能帮我得到想要的结果吗?

按照你选择的方式走会带来很多错误

通过计算,你可以简化你的方程式:

90/(360/n) =90*(n/360) =90/360*n =1/4*n =n/4 这很容易做到
int result=n/4
或者通过将n向右移动2:
int result=n>>2(只是“nerdier”,不一定更高效)


如果您需要
ex_角度
(即
360/n
),我会分别计算,以将误差保持在最小值。

您可以编写
int res=(int)(90/ex_角度)
这意味着将算术运算的结果强制转换为
int
,而不是强制转换单个操作数…如何
n/4
?90/(360/n)=90*(n/360)=0.25*n。。。甚至n>>2注:你可以改变整个局面:90*1000000/360。。。适用于所有整型运算。@deHaar谢谢,但我的IDE仍然向我显示错误
所需的int类型,前提是双精度
注意:在进行双除法时,您可能会看到浮点错误。因此,您的结果可能是24999999,而不是25000000…”,这可以通过将n向右移动2“确定;但是,在“做常规数学”的上下文中,除以4更具可读性,效率也不会降低。它的效率可能不会降低(Java API代码编写者会这样做-例如,请看
AbstractStringBuilder reverse()
)。但是说它更具可读性是纯粹的观点(我尊重地不同意这种观点)。特别是非常初级的开发人员可能很难进行突然的轮班操作。事实上,我建议在生产代码中甚至不要只删除“神奇数字”4。。。这可能不是不言而喻的,它是上述转变的结果。 90 / ( 360 / n ) = 90 * ( n / 360 ) = 90 / 360 * n = 1/4 * n = n / 4