3

負の数になる前にwhileループを中断しようとしていますが、0を超えて負の数を表示し続けます

問題は私のwhileループですこれはループです

while(Math.round(housetotal)>0){
    housetotal-=o*12;
    zx++;
    row_data.push([zx,
    {v:housetotal, f:'$'+Comma(housetotal)},        
    ]);

    if(zx == year || housetotal<=0){                 
            break
        }

    }

私のループはこのように機能します。

まあ言ってみれば

housetotal = 239,852 
o = 1,438

222,596で、14ループ後に-1,732までカウントダウンを続けます

ネガティブにならないように15,524である13番目のループで停止させようとしています

私のwhileステートメントでは、zxが私が持っている数に等しい場合、この場合は15であり、o * 12は、出てくる数に12を掛けたものですが、この場合は1,438 x 12 = 17,256

4

4 に答える 4

2

各ループ反復の最初に丸めた後は正である必要がありhousetotal、各ループ反復の最後で正でない場合はループから抜け出す必要があります。ここまでは順調ですね。

ただし、これらのチェックの後、(1)の値を変更し、housetotal( 2)それを利用します(この場合は、に入れます)row_data

使用時に値が正であることを確認したい場合は、使用する直前にテストする必要があります。

于 2012-05-10T00:00:37.550 に答える
0
var a = 239.852,
o = 1.432;
while(a>0 && (a-o*12)>0){
    a -= (a-o*12)>0 ? o*12 : 0;
}
于 2012-05-09T23:58:35.013 に答える
0

forループを見てください。パーツは次のとおりです。

<init counter variable>;
while ( <counter condition met> ) {
    <do task>;
    <update counter>;
}

繰り返しタスクを実行する前にカウンターを更新すると、条件が満たされない実行時に終了します。私はあなたのコードを提案します:

while( zx != year && Math.round(housetotal) > 0){
    row_data.push([
        zx,
        {v:housetotal, f:'$'+Comma(housetotal)},        
    ]);

    housetotal-=o*12;
    zx++;
}
于 2012-05-10T00:54:29.460 に答える
0

1つの解決策は、割り当て後に値を確認し、ループを中断することです。

while(Math.round(housetotal)>0){
   housetotal-=o*12;
   zx++;

   if(zx == year || housetotal<=0)               // moved here
      break;

   row_data.push( [zx, {v:housetotal, f:'$'+Comma(housetotal)}, ]);
}
于 2012-05-10T02:39:00.160 に答える