Bisogno di un formato di valuta personalizzato da utilizzare con String.Format
-
23-08-2019 - |
Domanda
Sto cercando di usare String.Format ( "{0: c}", someValue) in C #, ma sto avendo difficoltà a capire come configurare l'output per soddisfare le mie esigenze. Qui ci sono le mie esigenze:
- 0 uscite a vuoto
- 1.00 uscite a $ 1.00
- 10.00 uscite A $ 10.00
- 100.00 uscite a $ 100.00
- 1000.00 uscite a $ 1,000.00
Ho provato String.Format ( "{0: c}", someValue), ma per i valori zero emette $ 0.00 che non è quello che voglio. Ho anche provato String.Format ( "{0: $ 0,0.00; $ (0,0.00); #}", someValue), ma per 1.0 che emette $ 01.00. String.Format ( "{0: $ 0.00; $ (0.00); #}", someValue) lavora per la maggior parte dei casi, ma quando è somevalue 1000.00 l'uscita è $ 1000.00.
C'è qualche formato che si adatta tutti i 5 casi di cui sopra? Tutta la documentazione che ho letto solo i dettagli le basi e non tocca su questo tipo di scenario.
Soluzione
Se si utilizza
string.Format("{0:$#,##0.00;($#,##0.00);''}", value)
Si otterrà "" per il valore zero e gli altri valori devono essere formattati correttamente anche.
Altri suggerimenti
Provare qualcosa di simile a questo:
String currency = (number == 0) ? String.Empty : number.ToString("c");
A seconda se si sta costantemente utilizzando lo stesso tipo di dati per tutti i valori di valuta, si potrebbe scrivere un metodo di estensione che fare in modo che il tuo caso è sempre soddisfatta. Per esempio, se si sta utilizzando il tipo di decimali:
public static string ToCurrencyString (this decimal value)
{
if (value == 0)
return String.Empty;
return value.ToString ("C");
}
Ecco un grande di riferimento che si potrebbe trovare utile, che riassume questi dati: http: //blog.stevex .net / string-formattazione-in-csharp /
I formati di valuta "C" sono grandi fino a quando avete bisogno di uno spazio vuoto per 0. Qui ci sono due modi, uno di cui sopra, simili a quelle che uso che ti danno il bianco per 0:
// one way
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue)
// another way
somevalue.ToString("$#,##0.00;($#,##0.00);''")
La seconda tecnica si sente più "fluida", se vi piace questo stile di codice (come faccio io).