I\'m looking for a way to format a string into currency without using the TextField hack.
For example, i\'d like to have the number \"521242\" converted into \"5,212
This is what I have found reworking AAV answer using NSDecimalNumbers.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *cleanCentString = [[textField.text
componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
// Parse final integer value
NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithMantissa:[cleanCentString integerValue]
exponent:-2
isNegative:NO];
NSDecimalNumber *entry = [NSDecimalNumber decimalNumberWithMantissa:[string integerValue]
exponent:-2
isNegative:NO];
NSDecimalNumber *multiplier = [NSDecimalNumber decimalNumberWithMantissa:1
exponent:1
isNegative:NO];
NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
NSDecimalNumber *result;
// Check the user input
if (string.length > 0)
{
// Digit added
result = [price decimalNumberByMultiplyingBy:multiplier withBehavior:handler];
result = [result decimalNumberByAdding:entry];
}
else
{
// Digit deleted
result = [price decimalNumberByDividingBy:multiplier withBehavior:handler];
}
// Write amount with currency symbols to the textfield
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[_currencyFormatter setCurrencyCode:@"USD"];
textField.text = [_currencyFormatter stringFromNumber:result];
return NO;
}