我开发计算器只是为了好玩,所以我一直在努力使行为尽可能与 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/