【问题标题】:how to compare the decimal value with integer in iPhone?如何在 iPhone 中将十进制值与整数进行比较?
【发布时间】:2012-09-04 13:33:18
【问题描述】:

您好,我的最小值为 100,最大值为 400。用户应在此值内输入。如果他们输入 400.5 它不应该接受。那是对我的文本字段的验证。我使用了以下代码

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
                [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
                NSNumber *textFieldNumber = [formatter numberFromString:[dynamicHealthyHeartTxtFld text]];
                NSNumber *MaxNumber = [formatter numberFromString:[[healthyHeartFieldsAry objectAtIndex:getHHTag] objectForKey:@"MaxVal"]];
                NSNumber *MinNumber = [formatter numberFromString:[[healthyHeartFieldsAry objectAtIndex:getHHTag] objectForKey:@"MinVal"]];


                if ([self checkForDecimalValue:dynamicHealthyHeartTxtFld.text]) 
                {





                    if (([textFieldNumber decimalValue] < [MinNumber decimalValue]) || ([textFieldNumber decimalValue] > [MaxNumber decimalValue]) ) {

                        if ([textFieldNumber decimalValue] < [MinNumber decimalValue]) {

                            Custom_Alert *alert=[[Custom_Alert alloc] initWithTitle:@"Alert" message:[NSString stringWithFormat:@"The Value you entered in %@ is outside the acceptable range.Please correct and Continue ",[[healthyHeartFieldsAry objectAtIndex:getHHTag] objectForKey:@"TestName"]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                            [alert show];
                            enterAlert=YES;
                            [alert release];

                        }
                        else
                        {
                            Custom_Alert *alert=[[Custom_Alert alloc] initWithTitle:@"Alert" message:[NSString stringWithFormat:@"The Value you entered is %@ outside the acceptable range.Please correct and Continue",[[healthyHeartFieldsAry objectAtIndex:getHHTag] objectForKey:@"TestName"]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                            [alert show];
                            enterAlert=YES;
                            [alert release];

                        }

                    }


                }

如果我使用此代码。它正在接受 400.5。请帮我解决这个问题。

【问题讨论】:

  • 不应该接受任何个小数,还是只接受100到400范围内的小数?
  • 它可以接受。它可以接受 101.1,但不应该接受 400.99。因为 400.99 大于 400。它不应该接受大于 400
  • 它可以接受100到400范围内的小数
  • 为什么要比较浮点数或双精度数时使用 intValue 消息? floatValue 或 doubleValue 不是更有意义吗?
  • UITextField的内容转换成double,比较doubledouble...不是更简单吗?快速的想法:if ([myTextfield.text doubleValue] &lt;= 400.f &amp;&amp; [myTextField.text doubleValue] &gt;= 100.f) { ...in range... } else { ...outside of range... }。这对我来说更有意义。

标签: ios validation


【解决方案1】:

您需要将文本字段返回的NSString 转换为NSNumber

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *textFieldNumber = [formatter numberFromString:[textField text]];

然后使用

[textFieldNumber decimalValue] > 100.0 && [textFieldNumber decimalValue] < 400

检查范围。

【讨论】:

  • 我用过这个。但我得到一个错误,因为二进制 exp 的操作数无效。它不接受 nsnumber 进行比较。 if (([textFieldNumber decimalValue] [MaxNumber decimalValue]) ) {
  • 查看我在同一个问题中的帖子。我已经发布了更新的代码
  • 当你使用它时你会得到“无效的操作数”?
【解决方案2】:

我已将 (textfield.text) 字符串转换为双精度值,并将双精度值与双精度值进行比较。它工作正常。感谢您的所有回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2014-03-06
    • 2014-08-12
    • 2011-10-16
    相关资源
    最近更新 更多