【问题标题】:output for a texteild is zero rather then an actual resulttexteild 的输出为零而不是实际结果
【发布时间】:2013-05-13 11:11:04
【问题描述】:

这是一个奇怪的输出,我似乎每次都会触发警报视图,num1 的值会是0.50,这很好。

当我点击计算时,警报字段被触发,而且num1 设置为0.00,而总成本tcost 似乎总是0

这在以前从未发生过。

输出的类型应该是0.23 等。对于tcost,警告字段的原因是如果用户没有填写字段,我可以捕获。

(void)textFieldDidEndEditing:(UITextField *)textField
{
    CGRect viewFrame = self.view.frame;
    viewFrame.origin.y += animatedDistance;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
    [self.view setFrame:viewFrame];
    [UIView commitAnimations];

    if (textField1) {

        NSString *txt = self.textField1.text;
        double num1 = [txt doubleValue];
        double tCost = num1/100;

        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
        [numberFormatter setMaximumFractionDigits:3];
        [numberFormatter setRoundingMode: NSNumberFormatterRoundUp];
        NSString *numberString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:tCost]];

        self.textField1.text = [NSString stringWithFormat:@"%@",numberString];
    }
}

(IBAction)calculateCost:(UIButton *)sender {
    NSString *rate = self.textField1.text;
    NSString *wat = self.textField2.text;
    NSString *hours = self.textField3.text;
    NSString *Days = self.textField4.text;

    long double num1 = [rate doubleValue];
    long double num2 = [wat doubleValue];
    long double num3 = [hours doubleValue];
    long double num4 = [Days doubleValue];

    //double num12 = num1 /10000;

    double appKw = num2 / 1000;
    double costKwph = appKw *num1;

    double tCost = ((num4 * num3) * costKwph);

    if (num2 == 0||  num1 <= 0.000|| num3 == 0 || num4 == 0) {
        self.textField5.text = 0;

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"oops" message:@"you must fill in all fields" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];

        [alert show];
    }

    tCost = tCost / 100;

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

    [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
    [numberFormatter setMaximumFractionDigits:4];


    NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:tCost]];

    self.textField5.text = [NSString stringWithFormat:@"%@",numberAsString];
}

【问题讨论】:

  • 如果我删除 textFieldDidEndEditing 中的 if 语句并包含代码,则提交按钮可以正常工作。我认为这可能在于 nsnumberformatter /double 和计算在警报视图中捕获零的问题

标签: ios double uialertview string-formatting textfield


【解决方案1】:

尝试在 NSNumber 中转换你的 textField,例如:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * num1 = [f numberFromString:self.textField1.text];

【讨论】:

  • NSNumberFormatter *nFormatter = [[NSNumberFormatter alloc] init]; [nFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; [nFormatter setMaximumFractionDigits:3]; NSNumber * num11 = [nFormatter numberFromString:self.textField1.text]; [nFormatter setRoundingMode: NSNumberFormatterRoundUp]; NSString *numberString = [nFormatter stringFromNumber: [NSNumber numberWithFloat:num11]]; self.textField1.text = [NSString stringWithFormat:@"%@",numberString]; }
  • 抱歉,我不确定如何以格式化的方式添加 cmets,但我尝试了您的想法,我收到了 redfine 类型错误,但无法编译
【解决方案2】:
if (textField == self.textField1) {
      NSNumberFormatter *nFormatter = [[NSNumberFormatter alloc] init];
      [nFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
      self.textField1.text = [nFormatter stringFromNumber:[NSNumber numberWithFloat:     [self.textField1.text doubleValue] / 100]];
    }

您无法从货币中提取浮点数,因此 textField5 中的结果为零。因此将上述格式输出到相应的标签,以便用户可以看到格式化的字符串。

if (textField == self.textField1) {
    NSNumberFormatter *nFormatter = [[NSNumberFormatter alloc] init];
    [nFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
    self.labeltest.text = [nFormatter stringFromNumber:[NSNumber numberWithFloat: [self.textField1.text doubleValue] /100]];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2018-10-27
    • 1970-01-01
    • 2018-03-05
    • 2020-05-11
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多