我想找到最接近的分数等于16/76。无论何时我运行这个,无论如何我都会得到1。我在学校为Java课做这个。
public class ClassOne {
public static double limit = 16/76;
public static double difference = 1;
public static double numer = 1;
public static double denom = 1;
public static void main(String[] args)
{
for(int i = 1;i<=100;i++)
{
for(int x = 1;x<=100;x++)
{
double temp = limit-(double)(x/i);
System.out.println((x/i));
if(Math.abs(temp) < difference && x/i != 16/76){difference = temp;numer = x; denom = i;
System.out.println("hi");}
}
}
System.out.println(numer + " " + denom);
}
}
答案 0 :(得分:0)
你在这里遇到整数除法:
limit - (double)(x/i)
......在这里:
public static double limit = 16/76;
x
和i
都是int
。 分割操作生效后,此处的强制转换将生效。
更改您的演员表,使其立即应用于其中一个变量:
limit - ((double)x)/i
另外,考虑一下你在做任何不具有浮点数的商(除非在它之后有一个小数或显式地转换为double
) - 如果你需要的话它是一个浮点数,然后使用适当的演员。
答案 1 :(得分:0)
一些问题