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

我试图让它停在第 13 个循环,即 15,524,所以它不会变成负数

在我的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

一种解决方案是检查赋值后的值并打破循环然后:

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 回答
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 回答