【发布时间】:2014-01-27 19:49:55
【问题描述】:
我将十进制数字作为十进制存储在我的数据库中。我根据用户的语言环境显示它们:
- (NSString *) getLocalizedCurrencyStringWithDigits
{
NSNumberFormatter *numberFormatter =[[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setMinimumFractionDigits:2];
[numberFormatter setMaximumFractionDigits:2];
NSString *numberString = [numberFormatter stringFromNumber:self];
return numberString;
}
我将这些字符串显示在可编辑的文本字段中。因此,如果用户开始编辑该字段,我想删除千位分隔符。否则(在我的国家)我输入 1'000.55,然后它无法识别“'”并只保存一个 1。这是我解析文本字段的函数,在视图控制器中,这个确切的返回值将保存到数据库:
+ (NSDecimalNumber *) getUnLocalizedDecimalNumberWithString:(NSString *)currencyString
{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setMinimumFractionDigits:2];
[numberFormatter setMaximumFractionDigits:2];
BOOL isDecimal = [numberFormatter numberFromString:currencyString] != nil;
if(isDecimal){
return [NSDecimalNumber decimalNumberWithString:currencyString locale:[NSLocale currentLocale]];
} else {
return [NSDecimalNumber zero];
}
但是我不能让它工作...实际上最好是正确保存带有“'”和不带的数字,但我不能让它工作:/
编辑(我的解决方案): 让它像这样工作:
- (NSString *) getLocalizedCurrencyStringWithDigits:(int)digits
{
NSNumberFormatter *numberFormatter =[[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setMinimumFractionDigits:digits];
[numberFormatter setMaximumFractionDigits:digits];
NSString *numberString = [numberFormatter stringFromNumber:self];
return numberString;
}
+ (NSDecimalNumber *) getUnLocalizedDecimalNumberWithString:(NSString *)currencyString
{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setMinimumFractionDigits:2];
[numberFormatter setMaximumFractionDigits:2];
NSNumber *formatedCurrency = [numberFormatter numberFromString:currencyString];
BOOL isDecimal = formatedCurrency != nil;
if(isDecimal){
return [NSDecimalNumber decimalNumberWithDecimal:[formatedCurrency decimalValue]];
} else {
return [NSDecimalNumber zero];
}
}
+(NSDecimalNumber *) getUnLocalizedDecimalNumberWithString:(NSString *)currencyString
现在可以正确解释每个字符串。 1'000 和 1000 和 1000.00 现在都是 1000 :-)
【问题讨论】:
-
如果您解决了自己的问题,您应该发布解决方案作为答案,然后接受(一旦系统允许)。
-
是的,首先我想这样做,但后来我想先看看我的解决方案是否可以这样。我的意思是,如果我首先将字符串转换为 NSNumber,然后再转换为 NSDecimalNumber,从而丢失任何精度。或者,如果我创建了太多对象......我仍在学习每一行代码:)
标签: ios objective-c localization nsnumberformatter