How to properly format currency on ios

后端 未结 7 1115
梦谈多话
梦谈多话 2020-12-01 09:19

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

7条回答
  •  南笙
    南笙 (楼主)
    2020-12-01 09:45

    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;
    }
    

提交回复
热议问题