将双精度转换为整数 (java)

Convert double to int (java)

我正在尝试编写一个程序来模拟太阳系。

for(int i=0;i<1000;i++) {
    double X=(160*Math.cos((2*PI*i)/365));
    double Y=(160*Math.sin((2*PI*i)/365));
    posX=Math.round(X);
    posY=Math.round(Y);
    cadre.repaint();
    sleep(200);
}
f.setVisible(false);

为了让我的行星绕着太阳转,我有一个公式;问题是我用这个公式有一个双数,我不能让他变成一个整数(我试过 floor(X), Math.round(X), 不起作用(错误:不兼容的类型:从 long 到 int 的可能有损转换)

[]

你会发现它并不是真正的 java,但他的工作方式是 Java(有点 Javascool),所以你的建议可能对我有用!

像这样向 int 添加类型转换:

posX = (int) Math.round(X);

当您将 double 转换为 int 时,编译器无法确定这是否是安全操作。您必须使用显式转换,例如

double d = ...
int i = (int) d; // implicitly does a floor(d);

在Java8中有一个功能可以帮助检测演员表是否安全(至少从很长一段时间开始)Math.toIntExact

int i = Math.toIntExact((long) d); // implicitly does a floor(d);

您可以 运行 将 GUI 事件循环作为周期性任务执行此操作。

 double X= 160*Math.cos(i * 2 * PI / 360); 
 double Y= 160*Math.sin(i * 2 * PI / 360); 
 posX = Math.toIntExact(Math.round(X));
 posY = Math.toIntExact(Math.round(Y));
 cadre.repaint();
 // note you have to return so the image can actually be drawn.