我正在创建一个预算应用程序,允许用户输入他们的预算和交易.我需要允许用户从单独的文本字段输入便士和磅数,并且需要将它们与货币符号一起格式化.我现在工作得很好,但是想把它本地化,因为目前它只适用于GBP.我一直在努力将NSNumberFormatter的例子从Objective C转换为Swift.
我的第一个问题是我需要将输入字段的占位符设置为特定于用户位置.例如.英镑和便士,美元和美分等......
第二个问题是需要格式化在诸如10216和32的每个文本字段中输入的值,并且需要添加特定于用户位置的货币符号.所以这将是10,216.32英镑或10,216.32美元等...
另外,我需要在计算中使用格式化数字的结果.那么如何在不遇到货币符号问题的情况下解决问题呢?
任何帮助将非常感激.
我有一个数字可以说0.00.
0.010.121.2312.34我怎么能用Swift做到这一点?
1.4324 =>"1.43"
9.4000 =>"9.4"
43.000 =>"43"9.4 =>"9.40"(错误)
43.000 =>"43.00"(错误)
在这两个问题中,答案都指向了NSNumberFormatter.所以应该很容易实现,但不适合我.
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)];
NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init];
[doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle];
[doubleValueWithMaxTwoDecimalPlaces setPaddingPosition:NSNumberFormatterPadAfterSuffix];
[doubleValueWithMaxTwoDecimalPlaces setFormatWidth:2];
NSNumber *myValue = [NSNumber numberWithDouble:0.01234];
//NSNumber *myValue = [NSNumber numberWithDouble:0.1];
myLabel.text = [doubleValueWithMaxTwoDecimalPlaces stringFromNumber:myValue];
[self.view addSubview:myLabel];
[myLabel release];
myLabel = nil;
[doubleValueWithMaxTwoDecimalPlaces release];
doubleValueWithMaxTwoDecimalPlaces = nil;
}
Run Code Online (Sandbox Code Playgroud)
我也试过了
NSString *resultString = [NSString stringWithFormat: @"%.2lf", [myValue doubleValue]]; …Run Code Online (Sandbox Code Playgroud) 有没有办法使用NSNumberFormatter获得'th''st''nd''rd'数字结尾?
编辑:
看起来它不存在.这就是我正在使用的.
+(NSString*)ordinalNumberFormat:(NSInteger)num{
NSString *ending;
int ones = num % 10;
int tens = floor(num / 10);
tens = tens % 10;
if(tens == 1){
ending = @"th";
}else {
switch (ones) {
case 1:
ending = @"st";
break;
case 2:
ending = @"nd";
break;
case 3:
ending = @"rd";
break;
default:
ending = @"th";
break;
}
}
return [NSString stringWithFormat:@"%d%@", num, ending];
}
Run Code Online (Sandbox Code Playgroud)
改编自nickf的答案这里 是否有一种简单的方法可以获得数字的"st","nd","rd"和"th"结尾?
任何人都可以帮助我:我需要实现UITextField输入数字.此数字应始终为十进制格式,包含4个位置,例如12.3456或12.3400.所以我创建NSNumberFormatter了帮助我小数位.
我正在设置UITextField值
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
方法.我处理输入,使用格式化程序,最后调用[textField setText: myFormattedValue];
这工作正常,但此调用也将光标移动到我的字段的末尾.这是不需要的.例如,我的字段中有12.3400,光标位于最开头,用户类型编号为1.结果值为112.3400,但光标在末尾移动.我希望在用户期望时(在最近添加的数字1之后)以光标结束.有一些关于设置游标的主题,TextView但这是UITextField.我也尝试捕获selectedTextRange该字段,它正确地保存了光标位置但是在setText方法调用之后,这会自动更改并且原点UITextRange丢失(更改为当前).希望我的解释清楚.
请在这件事上给予我帮助.非常感谢你.
编辑:最后,我决定在整个编辑后切换功能改变格式,并且工作得很好.我通过添加选择器完成了它forControlEvents:UIControlEventEditingDidEnd.
我正在使用Swift
let myDouble = 8.5 as Double
let percentFormatter = NSNumberFormatter()
percentFormatter.numberStyle = NSNumberFormatterStyle.PercentStyle
percentFormatter.multiplier = 1.00
let myString = percentFormatter.stringFromNumber(myDouble)!
println(myString)
Run Code Online (Sandbox Code Playgroud)
输出8%而不是8.5%,我怎么能输出8.5%?(但最多只有2位小数)
我不明白NSNumberFormatterPercentStyle是如何工作的!
例:
NSNumber *number = [NSNumber numberWithFloat:90.5];
NSNumberFormatter *percentageFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[percentageFormatter setNumberStyle:NSNumberFormatterPercentStyle];
NSString *strNumber = [percentageFormatter stringFromNumber:numbericString];
NSLog (strNumber); // Output: 9,050%
Run Code Online (Sandbox Code Playgroud)
我只想表现出"90.5%"(尊重NSLocal).什么是NSNumberFormatterPercentStyle使用90.5,为什么?而且,我怎样才能得到我想要的结果!?
似乎NSNumberFormatter无法将欧元(可能还有其他)货币字符串解析为数字类型.有人可以证明我错了.
我正在尝试使用以下内容从货币字符串中获取数字金额:
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *currencyNumber = [currencyFormatter numberFromString:currencyString];
Run Code Online (Sandbox Code Playgroud)
这适用于英国和美国的货币金额.它甚至可以处理$和£以及数千个分离器而没有任何问题.
但是,当我使用欧元货币金额(在设置应用程序中将区域格式设置为法国或德国)时,它返回一个空字符串.以下所有字符串都失败:
12,34 €
12,34
12.345,67 €
12.345,67
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这些字符串与使用相应语言环境时NSNumberFormatter的stringFromNumber方法完全匹配.
在设置应用中将区域格式设置为法国,然后在以下代码中将currencyNumber设置为12.34,导致currencyString设置为'12,34€':
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *currencyString = [currencyFormatter stringFromNumber:currencyNumber];
Run Code Online (Sandbox Code Playgroud)
显然很容易就欧元问题解决这个问题,但我希望在尽可能多的国家销售这个应用程序,我认为其他语言环境肯定会发生类似的情况.
有人有答案吗?
TIA,Duncan
我有一个NSNumberFormatter,我试图用来从NSNumber生成一整套GBP(£).无论我尝试哪种咒语,我都会得到两位小数.我的代码是:
NSNumberFormatter *fmtCurrency = [[[NSNumberFormatter alloc] init] autorelease];
[fmtCurrency setNumberStyle: NSNumberFormatterCurrencyStyle];
[fmtCurrency setGeneratesDecimalNumbers:FALSE];
[fmtCurrency setCurrencyCode:@"GBP"];
[fmtCurrency setCurrencySymbol:@"£"];
txtTotal.text = [fmtCurrency stringFromNumber: result.Bill ]; // this is an NSNumber
Run Code Online (Sandbox Code Playgroud) 我正在使用NSNumberFormatter从字符串中获取货币值,它运行良好.
我使用此代码执行此操作:
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]];
Run Code Online (Sandbox Code Playgroud)
但是,它总是在字符串的开头给我一个货币符号.而不是手动形成我给定的字符串,我不能以某种方式让格式化程序不给字符串任何货币符号?
ios ×5
iphone ×5
objective-c ×4
swift ×3
currency ×2
uitextfield ×2
cocoa ×1
cocoa-touch ×1
decimal ×1
ipad ×1
nsnumber ×1
percentage ×1
selectedtext ×1
swift3 ×1