ios - 当用户输入格式为 (1,000) 的数字(如 (1000))时,将逗号添加到计算器中的字符串

标签 ios objective-c

我开发计算器只是为了好玩,所以我一直在努力使行为尽可能与 iOS7 计算器相似。现在,我遇到了一个问题,当用户在计算器中输入数字时,我正在使用 stringByAppendingString 来添加用户按下的每个数字。

因此,我已经想出了一种使用 NSNumberFormatter 来格式化计算结果的方法,以便在计算结果为 时显示逗号1000 = 1,000。但是,要对我的 UILabel Screen 执行此操作以更新用户此时正在键入的当前字符串有点困难。一旦用户输入像 2000 = 2,000 这样的数字,它就会发生。

只是,为了更好地解释上面的情况,用户键入 2 并将其发送到屏幕。然后,0会被stringByAppendingString追加到Screen等等..

所以,我一直在尝试修改我的函数 appendDigit 以尝试以这种方式在我的计算器中处理这种情况,

- (void)appendDigit:(NSString *)digit {

    screenF = [[self screenValue] floatValue];
    NSString *display = [NSNumberFormatter localizedStringFromNumber:@(screenF)                                                             numberStyle:NSNumberFormatterDecimalStyle];

    if ([self.Screen.text isEqualToString:@"0"] && ![digit isEqualToString:@"."]) {
        self.Screen.text = digit;
    } else if(self.userIsInTheMiddleOfEntereingANumber){
        self.Screen.text = digit;
        self.userIsInTheMiddleOfEntereingANumber = NO;
    } else{
        display = [Screen.text stringByAppendingString:digit];
        self.Screen.text = display;
    }

}

更新 版本的 appendDigit

- (void)appendDigit:(NSString *)digit {

    if ([self.Screen.text isEqualToString:@"0"] && ![digit isEqualToString:@"."]) {
        self.Screen.text = digit;
    } else if(self.userIsInTheMiddleOfEntereingANumber){
        self.Screen.text = digit;
        self.userIsInTheMiddleOfEntereingANumber = NO;
    } else{
        self.Screen.text = [Screen.text stringByAppendingString:digit];

        float screenTmp = [[self screenValue] floatValue];

        NSString *display = [NSNumberFormatter localizedStringFromNumber:@(screenTmp) numberStyle:NSNumberFormatterDecimalStyle];
        self.Screen.text = display;

    }
}

这是我从 Screen 获取浮点值的函数,我通常用它来计算,但我试图用它来获取当前数字到目前为止用户已经输入了它,

- (NSNumber *)screenValue {
    NSNumberFormatter *numberFormat = [[NSNumberFormatter alloc] init];
    numberFormat.usesGroupingSeparator = YES;
    numberFormat.groupingSeparator = @",";
    numberFormat.groupingSize = 3;
    [numberFormat setNumberStyle:NSNumberFormatterDecimalStyle];
    return [numberFormat numberFromString:self.Screen.text];
}

这是我计算器中按钮(数字/数字)之一的示例,

-(IBAction)Number8:(UIButton *)sender{
    [self appendDigit:@"8"];
}

-(IBAction)Number9:(UIButton *)sender{
    [self appendDigit:@"9"];
}

这就是我进行格式化以将逗号添加到计算结果的方式,

-(IBAction)Equals:(UIButton *)sender{

    [self MyOperations];

    NSString *display = [NSNumberFormatter localizedStringFromNumber:@(result)                                                             numberStyle:NSNumberFormatterDecimalStyle];
    self.Screen.text = display;

    self.Method = 0;

    self.userIsInTheMiddleOfEntereingANumber = NO;
}

好吧,我希望有人能指导我解决这个问题并帮助我解决这个问题。如果你们需要更多信息或任何其他可能有助于更好地理解事物并找到解决方案的代码部分,请告诉我,我很乐意将其添加到帖子中。提前致谢:)

最佳答案

不是附加用户输入的每个数字,而是设置一个完整的字符串。保留对键入数字的引用。例如:

@property(nonatomic, strong) NSNumber *number;

每次用户键入一个数字时,将其与一个数字组合。然后,在使用 NSNumberFormatter 将其放入标签之前将其转换为字符串。

NSNumberFormatter *numberFormat = [[NSNumberFormatter alloc] init];
numberFormat.usesGroupingSeparator = YES;
numberFormat.groupingSeparator = @",";
numberFormat.groupingSize = 3;  

关于ios - 当用户输入格式为 (1,000) 的数字(如 (1000))时,将逗号添加到计算器中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704448/

相关文章:

ios - 如何在iphone和模拟器之间建立p2p连接

ios - swift 崩溃 : function signature specialization <Arg[0] = Owned To Guaranteed>

objective-c - NSValue :getValue: strange behavior, 为什么会出现这种情况?

objective-c - 将 char 数组转换为 NSString 对象

ios - 动态调整 UITableViewCells 的问题

ios - 警告 : Attribute Unavailable: Content Edge Inset in iPhone SDK for iOS versions prior to 3. 0

javascript - JSON.Parse 使 IOS 应用程序崩溃

ios - 在屏幕的一半处对自定义 View 进行动画处理,其中包含图像 - 突然的动画

ios - Xcode 4 构建具有不同配置设置的静态库依赖项

ios - 在 View Controller 中使用时不显示 Swift 自定义控件(附代码)