2012-06-29 13 views

risposta

9
var stringValue = Convert.ToDecimal(value).ToString("$0.00"); 

Come notato da @James indicati, questo hard-coded moneta nel formato. Utilizzando il formato C2 verrà utilizzato il formato di valuta del sistema. Questo può essere modificato per il sistema (ad esempio in Windows 7 - Start - Pannello di controllo - Cambia lingua di visualizzazione - Impostazioni aggiuntive - Valuta - Raggruppamento cifre) e consente al formato C2 di visualizzare il valore di valuta senza la virgola quando viene eseguito su quel particolare sistema .

EDIT

Tutto il merito per @James per utilizzare la cultura corrente. La mia unica modifica alla sua risposta sarebbe quella di clonare l'attuale NumberFormat in modo da ottenere tutte le proprietà del formato del numero di cultura corrente prima di rimuovere lo CurrencyGroupSeparator.

var formatInfo = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone(); 
formatInfo.CurrencyGroupSeparator = string.Empty; 

var stringValue = Convert.ToDecimal(value).ToString("C", formatInfo); 
+0

eh questo è tutto! Verrà accettato dopo 8 minuti :) –

+2

Anche se funziona, non è una soluzione flessibile, ovvero il codice di valuta utilizzato come codice di sicurezza. – James

+0

C'è un modo per convertire questo stringValue nel numero? – Micro

4

si dovrebbe utilizzare la classe NumberFormat per specificare il tipo di formattazione è necessario, ToString prende un parametro IFormatProvider esempio

var formatInfo = (System.Globalization.NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone(); 
formatInfo.CurrencyGroupSeparator = ""; // remove the group separator 
Console.WriteLine(2.ToString("C", formatInfo)); 
Console.WriteLine(4.ToString("C", formatInfo)); 
Console.WriteLine(1000.ToString("C", formatInfo)); 

Ciò manterrà la formattazione del numero coerente con qualsiasi cultura che si sta utilizzando.

+0

+1 a te! Soluzione molto migliore della mia risposta. –

+1

Forse usare 'var formatInfo = (NumberFormatInfo) CultureInfo.CurrentCulture.NumberFormat.Clone();' invece di creare un nuovo 'NumberFormatInfo'? in questo modo ti assicurerai di avere il formato numerico completo per la cultura corrente. –

+0

@Kevin +1 sì per completezza che sarebbe una soluzione migliore nel complesso. Aggiornerà la mia risposta – James

2
public static class MyExtensions 
{ 
    public static string GetMoney(this decimal value, bool displayCurrency = false, bool displayPeriods = true) 
    { 
     string ret = string.Format("{0:C}", value).Substring(displayCurrency ? 0 : 1); 
     if (!displayPeriods) 
     { 
      ret = ret.Replace(",", string.Empty); 
     } 
     return ret; 
    } 
} 

Per utilizzare questo metodo di estensione:

decimal test = 40023.2345M; 
string myValue = test.GetMoney(displayCurrency:true, displayPeriods:false);` 
0

conversione del valore intero in formato $ 0,00

int Value = 1000; string abc = Convert.ToDecimal (Value) .ToString ("$ 0,00"); L'uscita sarà $ 1000,00

Problemi correlati