将双精度转换为整数 (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.
我正在尝试编写一个程序来模拟太阳系。
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.