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以内没有错那?
到底是哪里的问题,我晕了.......

解决方案 »

  1.   

    终于找到了....else if  在java里有嵌套次数...超过四次就会出现错误!!!!!!!
      

  2.   

    真还没有遇到过 我刚才还在想呢
    最后一个if中就算是空的 也能输出a11的值 
      

  3.   

    楼主注意看看你最后两个else if的值,下面是我复制出来的,你看后应该会明白错误是怎么回事了:
    10000000
    1000000
      

  4.   

    次问题相当的严峻.... 
    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);
    求解?!?!!?!?!??!
      

  5.   


    是你复制错了吧...
    else if(i> 1000000)
    a11=a10+(i-1000000)*0.01d;
      

  6.   

    我没复制错啊。
       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);
    看两种颜色标记的地方。
      

  7.   

    最后一个else if条件中判断i大于10000000,就可以了啊。
    else if(i>10000000)
      

  8.   

    else if(i>600000&&i<=10000000)//这里判断的是i大于60万并且i小于等于1000万
        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.
      

  9.   

    在问一个问题....
    就是我要是写成方法.
    你看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提示出错。我这样加可以吗?还有什么好办法?
    }
      

  10.   

    根据你的意思,最后一个else if可以直接写成else
      

  11.   

    你的最后一个else if判断了上面判断情况外的所有情况,所以可以直接写成else。
      

  12.   

    果然是这样。这就不提示在加return了。万分感谢。
    看来我需要学的还有很多。再次感谢。
      

  13.   

    同意楼上的  DEBUG跟踪下 就知道哪里有问题了
      

  14.   

    好像double类型有精度问题,试试BigDecimal吧
      

  15.   

    之所以要加return语句是因为可能所有的条件都不满足,这时就没有返回值了,所以编译时会提示你错误