package suanfa;import java.util.Scanner;public class H55 { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入这个月的收入:");
double i=sc.nextDouble();
double a1,a2,a4,a6,a10,a11=0;
a1=100000*0.1d; //10w
a2=a1+100000*0.075d; //20w
a4=a2+200000*0.05; //40w
a6=a4+200000*0.03; //60w
a10=a6+400000*0.015; //100w
if(i<=100000)
a11=i*0.1d;
else if(i>100000&&i<=200000)
a11=a1+(i-100000)*0.075d;
else if(i>200000&&i<=400000)
a11=a2+(i-200000)*0.05d;
else if(i>400000&&i<=600000)
a11=a4+(i-400000)*0.03d;
else if(i>600000&&i<=10000000)
a11=a6+(i-600000)*0.015d;
else if(i>1000000)
a11=a10+(i-1000000)*0.01d;
System.out.println(a11); }
}我笨死了.怎么也找不到错误,但错误真的在这里面.
当传入的数字大于100w时就会计算出错.
按照这样计算 当传入的数是100w时,输出:39500.0 那口算一下当传入 110w时,应该是40500才对.
可是运行一下就发现输入时41000.
我这样写有什么错误吗?
100w一下都是正确的.难道是字符转换成String类型输出时出的错误吗?
那为什么100w以内没有错那?
到底是哪里的问题,我晕了.......
最后一个if中就算是空的 也能输出a11的值
10000000
1000000
if(i<=100000)
a11=i*0.1d;
else if(i>100000&&i<=200000)
a11=a1+(i-100000)*0.075d;
else if(i>200000&&i<=400000)
a11=a2+(i-200000)*0.05d;
else if(i>400000&&i<=600000)
a11=a4+(i-400000)*0.03d;
else if(i>600000&&i<=10000000)
a11=a6+(i-600000)*0.015d; //此句会影下下面的结果.不信你试试.改成*0.01,输出100w的结果
else if(i>1000000) //若是在此处的else处插入一对 {} ,就能正确了.
a11=a10+(i-1000000)*0.01d;
System.out.println(a11);
求解?!?!!?!?!??!
是你复制错了吧...
else if(i> 1000000)
a11=a10+(i-1000000)*0.01d;
else if(i>600000&&i<=10000000)
a11=a6+(i-600000)*0.015d;
else if(i>1000000)
a11=a10+(i-1000000)*0.01d;
System.out.println(a11);
看两种颜色标记的地方。
else if(i>10000000)
a11=a6+(i-600000)*0.015d;
else if(i>1000000)
a11=a10+(i-1000000)*0.01d;//这里又判断i大于100万
要是这样写的话,如果i的值大于100万并且小于1000万的话,最后两个else if语句都会执行。
刚才看楼主应该是笔误,在else if(i>600000&&i<=10000000)多写了个0.
就是我要是写成方法.
你看static double f(long i){
double a1,a2,a4,a6,a10,a11=0;
a1=100000*0.1d; //10w
a2=a1+100000*0.075d; //20w
a4=a2+200000*0.05; //40w
a6=a4+200000*0.03; //60w
a10=a6+400000*0.015; //100w
if(i<=100000)
return i*0.1d;
else if(i>100000&&i<=200000)
return a1+(i-100000)*0.075d;
else if(i>200000&&i<=400000)
return a2+(i-200000)*0.05d;
else if(i>400000&&i<=600000)
return a4+(i-400000)*0.03d;
else if(i>600000&&i<=1000000)
return a6+(i-600000)*0.015d;
else if(i>1000000)
return a10+(i-1000000)*0.01;
return a11; //为什么最后它非要我加个return,不然eclipse提示出错。我这样加可以吗?还有什么好办法?
}
看来我需要学的还有很多。再次感谢。