如何以浮点格式编写 NSString?
How to write NSString in a float format?
在我的应用程序中,我有一个 UITextField
。当用户输入 123456
之类的文本时,它应该在文本字段中显示 123,456.00
之类的内容。
使用了以下代码:
UITextField *txt = [[UITextField alloc]initWithFrame:CGRectMake(300, 120+y*58, 280, 31)];
txt.keyboardType = UIKeyboardTypeDecimalPad;
txt.borderStyle = UITextBorderStyleRoundedRect;
txt.font = [UIFont systemFontOfSize:15];
txt.textAlignment = NSTextAlignmentLeft;
txt.returnKeyType = UIReturnKeyDefault;
txt.delegate = self;
[txt addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
-(void)textFieldDidChange:(UITextField *)theTextField
{
NSString *textFieldText = [theTextField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:textFieldText];
NSString *formattedOutput = [formatter stringFromNumber:number];
theTextField.text=formattedOutput;
}
使用下面的代码
NSString *textFieldText = theTextField.text ;
float f = [theString floatValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
[formatter setLocale:[NSLocale currentLocale]];
NSLog(@"%@", [formatter stringFromNumber:@(f)]);
将 MinimumFractionDigits 设置为 2 并将 MaximumFractionDigits 设置为 2.Try 以上代码中文本字段的 textFieldDidEndEditing 委托方法。
您可以将这样的文本设置到您的文本视图中。
theTextField.text = [NSString stringWithFormat:@"%.02f", floatVal];
希望对您有所帮助。
如果将这两行添加到您发布的代码片段中:
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
就在您将数字格式化程序的样式设置为 NSNumberFormatterDecimalStyle 的那一行之后,它应该会为您提供您想要的内容。
@"123456" 将导致 @"123,456.00"
@"1" 将导致 @"1.00"
您几乎接近您的解决方案,只有很少的地方需要改进。首先,您必须指定允许的最大和最小分数位数,如下所示:
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
它将解决 *.00
问题,然后将其更新回 UI 是另一个问题。由于您正在设置文本字段文本:
theTextField.text=formattedOutput;
它将失去当前编辑位置,因此您将失去地面。例如,
您输入了 1
,上面的代码会将文本字段更新为 1.00
,并且光标将移动到位置 5:
1.00
^^^^^
如果您进一步编辑,您将不会得到预期的结果(文本将尝试在末尾追加)。
要解决此问题,您应该在使用处理程序 textFieldDidEndEditing
完成编辑后更新文本字段,或者您应该使用其他一些控件,例如 UILabel
来显示格式化结果。
示例代码:(用于演示)
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UITextField *txt = [[UITextField alloc]initWithFrame:CGRectMake(20, 120+(3)*58, 280, 31)];
txt.keyboardType = UIKeyboardTypeDecimalPad;
txt.borderStyle = UITextBorderStyleRoundedRect;
txt.font = [UIFont systemFontOfSize:15];
txt.textAlignment = NSTextAlignmentLeft;
txt.returnKeyType = UIReturnKeyDefault;
txt.delegate = self;
[self.view addSubview:txt];
[txt addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
lbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 160+(3)*58, 280, 31)];
[self.view addSubview:lbl];
}
-(void)textFieldDidChange:(UITextField *)theTextField
{
NSString *textFieldText = [theTextField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
NSNumber *number = [formatter numberFromString:textFieldText];
NSString *formattedOutput = [formatter stringFromNumber:number];
[lbl setText:formattedOutput];
}
在我的应用程序中,我有一个 UITextField
。当用户输入 123456
之类的文本时,它应该在文本字段中显示 123,456.00
之类的内容。
使用了以下代码:
UITextField *txt = [[UITextField alloc]initWithFrame:CGRectMake(300, 120+y*58, 280, 31)];
txt.keyboardType = UIKeyboardTypeDecimalPad;
txt.borderStyle = UITextBorderStyleRoundedRect;
txt.font = [UIFont systemFontOfSize:15];
txt.textAlignment = NSTextAlignmentLeft;
txt.returnKeyType = UIReturnKeyDefault;
txt.delegate = self;
[txt addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
-(void)textFieldDidChange:(UITextField *)theTextField
{
NSString *textFieldText = [theTextField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:textFieldText];
NSString *formattedOutput = [formatter stringFromNumber:number];
theTextField.text=formattedOutput;
}
使用下面的代码
NSString *textFieldText = theTextField.text ;
float f = [theString floatValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
[formatter setLocale:[NSLocale currentLocale]];
NSLog(@"%@", [formatter stringFromNumber:@(f)]);
将 MinimumFractionDigits 设置为 2 并将 MaximumFractionDigits 设置为 2.Try 以上代码中文本字段的 textFieldDidEndEditing 委托方法。
您可以将这样的文本设置到您的文本视图中。
theTextField.text = [NSString stringWithFormat:@"%.02f", floatVal];
希望对您有所帮助。
如果将这两行添加到您发布的代码片段中:
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
就在您将数字格式化程序的样式设置为 NSNumberFormatterDecimalStyle 的那一行之后,它应该会为您提供您想要的内容。
@"123456" 将导致 @"123,456.00" @"1" 将导致 @"1.00"
您几乎接近您的解决方案,只有很少的地方需要改进。首先,您必须指定允许的最大和最小分数位数,如下所示:
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
它将解决 *.00
问题,然后将其更新回 UI 是另一个问题。由于您正在设置文本字段文本:
theTextField.text=formattedOutput;
它将失去当前编辑位置,因此您将失去地面。例如,
您输入了 1
,上面的代码会将文本字段更新为 1.00
,并且光标将移动到位置 5:
1.00
^^^^^
如果您进一步编辑,您将不会得到预期的结果(文本将尝试在末尾追加)。
要解决此问题,您应该在使用处理程序 textFieldDidEndEditing
完成编辑后更新文本字段,或者您应该使用其他一些控件,例如 UILabel
来显示格式化结果。
示例代码:(用于演示)
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UITextField *txt = [[UITextField alloc]initWithFrame:CGRectMake(20, 120+(3)*58, 280, 31)];
txt.keyboardType = UIKeyboardTypeDecimalPad;
txt.borderStyle = UITextBorderStyleRoundedRect;
txt.font = [UIFont systemFontOfSize:15];
txt.textAlignment = NSTextAlignmentLeft;
txt.returnKeyType = UIReturnKeyDefault;
txt.delegate = self;
[self.view addSubview:txt];
[txt addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
lbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 160+(3)*58, 280, 31)];
[self.view addSubview:lbl];
}
-(void)textFieldDidChange:(UITextField *)theTextField
{
NSString *textFieldText = [theTextField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
NSNumber *number = [formatter numberFromString:textFieldText];
NSString *formattedOutput = [formatter stringFromNumber:number];
[lbl setText:formattedOutput];
}