我的十進制數以十進制形式存儲在我的數據庫中。我根據用戶的語言環境顯示它們: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