在while循环期间将两个变量比较到某些小数位?

时间:2011-05-06 20:25:47

标签: objective-c floating-point while-loop

如果您查看下面的代码,您可以看到我正在运行if语句来检查文本字段是否为空,如果它是空的则运行while循环。我的问题是,当我比较两个变量时,Q和Qc我只想测试循环到某个小数位,例如十分之一。

我尝试使用@“%。1f”和变量,但我猜我的语法错了。如果有人可以帮助我,我会很感激。

        if ([heightTextField.text isEqualToString:@""]) {
            while (Q != Qc) {
                Hc = Hc + 0.01;
                Qc = 1.486*(Hc*W)*(powf(((Hc*W)/(2*Hc+2*W)), 0.6666666667))*(powf(S, 0.50))/n;
                H = Hc;
            }
        }
        if ([widthTextField.text isEqualToString:@""]) {
            while (Q != Qc) {
                Wc = Wc + 0.01;
                Qc = 1.486*(H*Wc)*(powf(((H*Wc)/(2*H+2*Wc)), 0.6666666667))*(powf(S, 0.50))/n;
                W = Wc;
            }
        }

谢谢, 德纳

3 个答案:

答案 0 :(得分:1)

这是一个想法: 如果要比较小数点后的一位数,请先将该数字乘以10.然后,您可以选择使用roundf,floor,ceil或其他操作来对数字进行整形。完成后,您可以再次除以10并进行比较。

答案 1 :(得分:0)

可能有一种更简单的方法可以解决这个问题,但是,这将是我采取的方法。

首先,这可能不适用于您,但我在将textField与@“”(它永远不会说这是真的)进行比较时遇到了问题,所以我之后使用了if ([myTextField.text length])

至于比较,这是我将使用的代码:

NSString *qString = [NSString stringWithFormat:@"%.1f", Q];
NSString *qcString = [NSString stringWithFormat:@"%.1f", Qc];
while (![qString isEqualToString:qcString]) {
    // continue code to update Qc...;
    // update qcString;
    qcString = [NSString stringWithFormat:@"%.1f", Qc];
}

答案 2 :(得分:0)

要测试大于0.1的差异,请使用:

while (fabs(Q - Qc) > .1) {
    ...
}