我有一個UITextField在我的應用程序只接收來自用戶的數字輸入。此數字輸入表示貨幣並且具有默認值0.00。爲貨幣格式UITextField
我想創建一個類似於掩碼的東西來格式化用戶輸入數字時的UITextField。例如:
9成爲$ 0.09 99變成$ 0.99 999變成$ 999,99
下面的代碼的偉大工程,但我使用的整數和浮點值的應用程序最終會顯示錯誤重視某一點。例如:
999999999變得億
這是因爲海軍報和整數都不夠精確和NSDEcimalNumber應該使用。關鍵是我無法弄清楚如何將我的整數和浮點值替換爲NSDecimalNumber。
有沒有人可以幫我解決這個問題?我花了一些時間在網絡上尋找解決方案,但沒有找到適合我需求的問題,還有大量問題相同的人。
繼承人的代碼:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.tag == 1){
NSString *cleanCentString = [[textField.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
NSInteger centValue= cleanCentString.integerValue;
if (string.length > 0)
{
centValue = centValue * 10 + string.integerValue;
}
else
{
centValue = centValue/10;
}
NSNumber *formatedValue;
formatedValue = [[NSNumber alloc] initWithFloat:(float)centValue/100.0f];
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
textField.text = [_currencyFormatter stringFromNumber:formatedValue];
return NO;
}
if (textField.tag == 2){
// Nothing for now
}
return YES;
}
你有一個更大的問題。您假定貨幣以美元等貨幣值的百分之一輸入。例如,日本人不會感到高興,因爲日元只有整個日元。在將數字格式化程序設置爲貨幣形式並查看其設置的小數位數後,您應該詢問數字格式化程序。 – rmaddy
你說得對,rmaddy。後退日誌不斷增加= D – Carlos
就個人而言,我認爲最好讓用戶鍵入一個原始數字,而不是「格式隨時」處理。不要格式化原始數字,直到用戶離開文本字段。作爲一個用戶,當我真的需要小數時,我寧願輸入小數點分隔符。如果我輸入「9」,那麼我的意思是九美元,而不是九美分。如果我想要九分錢,那麼我想輸入'.09'。讓後處理格式爲'0.09'或完成輸入後的任何內容。不要讓我輸入'900'來獲得9美元。但這只是一個意見。 – rmaddy