2012-09-20 18 views
17

Sto utilizzando NSNumberFormatter per ottenere un valore di valuta da una stringa e funziona correttamente.Valuta NSNumberFormatter senza simbolo?

Io uso questo codice per farlo:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
    [nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]]; 

Tuttavia, mi dà sempre un simbolo di valuta all'inizio della stringa. Piuttosto che formattare manualmente la mia stringa, non posso in qualche modo avere il formattatore non dare alla stringa alcun simbolo di valuta?

Qualsiasi aiuto è apprezzato, grazie.

+0

mente che non sarà sempre al via - per i prezzi in euro si avrà qualcosa di simile 12,34 € – ATV

risposta

57

Sì, dopo aver impostato lo stile, che potete impostare aspetti specifici:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[nf setCurrencySymbol:@""]; // <-- this 
NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:[textField text]]; 
NSString *price = [nf stringFromNumber:number]; 

Proprio come un consiglio, probabilmente si dovrebbe utilizzare un numero formattatore di leggere il valore della stringa, soprattutto se un utente sta entrando esso (come suggerito dal tuo codice). In questo caso, se l'utente immette il testo di formattazione specifico per la locale, i metodi generici di tipo e -doubleValue non forniranno numeri troncati. Inoltre, dovresti probabilmente usare -doubleValue per convertire in un numero in virgola mobile dal testo inserito dall'utente che è una valuta. Ulteriori informazioni sono disponibili nel video della sessione di sviluppo WWDC'12 sull'internazionalizzazione.

Modifica: utilizzato un codice NSDecimalNumber nel codice di esempio per rappresentare il numero immesso dall'utente. Non sta ancora facendo validazione, ma meglio del codice originale. Grazie @Mark!

+0

Per soldi potresti voler usare NSDecimalNumber piuttosto che double in modo da non avere problemi di arrotondamento – Mark

+0

@ Mark Sì, sono d'accordo, in realtà sto andando a modificare il codice originale per farlo. –

0

come per Swift Lingua

let mymoney = 12000 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencySymbol = "" 
formatter.locale = NSLocale.currentLocale() 

let resultString = formatter.stringFromNumber(mymoney)! 
2

Con Swift 3, NumberFormatter ha una proprietà chiamata currencySymbol. currencySymbol ha la seguente dichiarazione:

var currencySymbol: String! { get set } 

La stringa usata dal ricevitore come un simbolo di valuta locale.

Pertanto, se richiesto per lo stile di formattazione, è possibile impostare questa proprietà su un valore vuoto String.


Il seguente codice di giochi mostra come impostare il vostro stile di formattazione di valuta con un simbolo vuoto:

import Foundation 

let amount = 12000 

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.currencySymbol = "" 
formatter.locale = Locale(identifier: "en_US") // set only if necessary 

let result = formatter.string(for: amount) 
//let result = formatter.string(from: NSNumber(value: amount)) // also works 

print(String(describing: result)) 
// prints Optional("12,000.00") 
Problemi correlati