注意:我无法为此问题找到合适的标题......
class MyPanel
设置JPanel
并在其上设置自定义绘图。为了使图形适合在JPanel
中设置的class
的实际尺寸,我需要计算JPanels
宽度或高度与int scale
的比率}。
我需要ratio
的小数部分,因为它取决于它< /> 0.5我想以不同的方式对待结果。
public class MyPanel extends JPanel {
public void setUp(int px, int py, int width, int height){
this.setBackground(Color.WHITE);
this.setBounds(px, py, width, height);
}
int scale = 35;
public int plusX(){
double ratio = this.getHeight()/scale;
long integer;
double fractional;
int plusX = 0;
integer = (long) ratio;
fractional = ratio - integer;
if (fractional > 0.5){
plusX = (int) (scale*fractional);
}
if (fractional < 0.5 ){
plusX = (int) (-scale*fractional);
}
System.out.println("ratio: "+ratio+ " integer: "+integer+" fractional: "+fractional+" plusX: "+plusX);
return plusX;
}
}
width = 1254, height = 648
和scale = 35
的输出结果为:
ratio: 18.0 integer: 18 fractional: 0.0 plusX: 0
但是18是错的,导致fractional = 0.0
scale*ratio
应生成height
(例如:35*18.51=648
fractional = 0.51
}。
无论我选择哪种比例值,比率始终保持准确.0。
答案 0 :(得分:3)
与documentation相同,getHeight()
给出了int
。 scale
也是int
。在Java中,除以2 {int}得到int
,因此ratio
变为18
。
要解决这个问题,请将scale声明为double,因为thag会产生一个浮点数,这就是你所追求的。
答案 1 :(得分:1)
scale和getHeight()的返回值都是整数,所以即使你的ratio变量初始化为double,你也要划分两个整数,这意味着它只会给你一个整数作为答案。您需要确保将一个(或两个)值转换为double,以便获得正确的答案,这将有助于您完成剩余的计算。
示例:
double ratio = (double) this.getHeight() / scale;