restaurar restablecer resetear formatear fabrica desbloquear como bloqueado iphone ios numbers currency formatter

iphone - restablecer - Cómo formatear correctamente la moneda en ios



como restablecer un iphone (7)

Estoy buscando una manera de formatear una cadena en moneda sin usar el hack TextField.

Por ejemplo, me gustaría tener el número "521242" convertido en "5,212.42" O si tengo un número por debajo de 1 $, me gustaría que se vea así: "52" -> "0.52"

Gracias


Es probable que desee algo como esto (suponiendo que la moneda es un flotador):

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:currency]];

De sus requisitos para tratar 52 como .52, es posible que deba dividir por 100.0.

Lo bueno de este enfoque es que respetará la configuración regional actual. Entonces, cuando corresponda, formateará su ejemplo como "5.212,42".

Actualización: Tal vez fui un poco rápido al publicar mi ejemplo. Como señala Conrad Shultz a continuación, cuando se trata de importes de moneda, sería preferible almacenar las cantidades como NSDecimalNumber s. Esto reducirá en gran medida los dolores de cabeza con errores de redondeo. Si hace esto, el fragmento de código anterior se convierte (suponiendo que la moneda es un NSDecimalNumber* ):

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; NSString *numberAsString = [numberFormatter stringFromNumber:currency];


Esto es lo que he encontrado para reelaborar la respuesta de AAV usando 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; }


Use el siguiente código y resolverá todos sus problemas ...

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[currency doubleValue]]];


Yo uso este código Este trabajo para mí

1) Agregar delegado UITextField al archivo de encabezado

2) Agregue este código (ARC habilitado)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *cleanCentString = [[textField.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; // Parse final integer value NSInteger centAmount = cleanCentString.integerValue; // Check the user input if (string.length > 0) { // Digit added centAmount = centAmount * 10 + string.integerValue; } else { // Digit deleted centAmount = centAmount / 10; } // Update call amount value NSNumber *amount = [[NSNumber alloc] initWithFloat:(float)centAmount / 100.0f]; // Write amount with currency symbols to the textfield NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init]; [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [_currencyFormatter setCurrencyCode:@"USD"]; [_currencyFormatter setNegativeFormat:@"-¤#,##0.00"]; textField.text = [_currencyFormatter stringFromNumber:amount]; return NO; }


versión swift 2.0:

let _currencyFormatter : NSNumberFormatter = NSNumberFormatter() _currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle _currencyFormatter.currencyCode = "EUR" textField.text = _currencyFormatter.stringFromNumber(amount);


Para el código probado de Swift (ref del código de AAV)

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{ let strMain : NSString = string let arrTemp : NSArray = (textField.text?.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))! let str: NSString = arrTemp.componentsJoinedByString("") //NSInteger centAmount = cleanCentString.integerValue; var centAmount : NSInteger = str.integerValue if (string.length > 0) { // Digit added centAmount = centAmount * 10 + strMain.integerValue; } else { // Digit deleted centAmount = centAmount / 10; } let amount = (Double(centAmount) / 100.0) let currencyFormatter = NSNumberFormatter() currencyFormatter.numberStyle = .CurrencyStyle currencyFormatter.currencyCode = "USD" currencyFormatter.negativeFormat = "-¤#,##0.00" let convertedPrice = currencyFormatter.stringFromNumber(amount) print(convertedPrice) txtAmount.text = convertedPrice! //set text to your textfiled return false //return false for exact out put }

Nota: si desea eliminar el símbolo de moneda predeterminado de la entrada, puede usar currencySymbol para poner en blanco como se muestra a continuación

currencyFormatter.currencyCode = nil currencyFormatter.currencySymbol = ""

Feliz codificación!


func getCurrencyFormat(price:String)->String{ let convertPrice = NSNumber(double: Double(price)!) let formatter = NSNumberFormatter() formatter.numberStyle = .CurrencyStyle formatter.currencyCode = "USD" let convertedPrice = formatter.stringFromNumber(convertPrice) return convertedPrice! }

Nota: - Un código de moneda es un código de tres letras que, en la mayoría de los casos, está compuesto por el código de país de Internet de dos caracteres de un país más un carácter adicional para indicar la unidad monetaria. Por ejemplo, el código de moneda para el dólar australiano es "AUD".