我的十进制数以十进制形式存储在我的数据库中。我根据用户的语言环境显示它们:iOS:删除NSDecimalNumber中的千位分隔符以进行编辑
- (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现在:-)
如果你解决你自己的问题,你应该张贴的溶液,作为一个答案,然后接受它(一旦系统可以让你)。 – Almo
是的,首先我想,但是我想先看看我的解决方案是否可以。我的意思是如果我失去了任何精度,首先将字符串转换为NSNumber,然后再转换为NSDecimalNumber。或者如果我创建了太多的对象...我仍然在学习每行代码:) – MichiZH