iOS:删除 NSDecimalNumber 中的千位分隔符进行编辑

标签 ios objective-c localization nsnumberformatter

我将十进制数字作为十进制存储在我的数据库中。我根据用户的语言环境显示它们:

- (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。这是我解析文本字段的函数,在 View Controller 中,这个确切的返回值将保存到数据库:
+ (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 :-)

最佳答案

我认为最简单、最干净的解决方案是:

NSLocale *locale = [NSLocale currentLocale];
NSString *thousandSeparator = [locale objectForKey:NSLocaleGroupingSeparator];
NSString *result = [decimalStringWithThousandSeperator stringByReplacingOccurrencesOfString:thousandSeparator withString:@""];

关于iOS:删除 NSDecimalNumber 中的千位分隔符进行编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21390264/

相关文章:

ios - 使用 CAShapeLayer 和 removeFromSuperLayer

objective-c - NSMutableArray 计算对象的出现次数,然后重新排列数组

ios - 是否可以从 iphone 打开 apple watch 应用程序

objective-c - UISearchController 搜索栏位置下降 64 点

java - Java 的 equalsIgnoreCase 的正确替代方法是什么?

c# - 为什么 N'ko 使用 3 位小数来显示定点 ("F") 数字,而实际上其他所有文化都使用 2 位?

android - 在 android DatePickerDialog 中将语言设置为法语

ios - 如何使用 Swift 在 iOS 中制作没有导航栏的快照?

ios - 使用 ArcGis Api 在 iOS 上加载 pdf map

iOS - 如何在 "touchesMoved:"方法中用手指绘制平滑线