2009-05-20 10 views
51

In questo momento hoCome si formatta un doppio in valuta arrotondato al dollaro più vicino?

double numba = 5212.6312 
String.Format("{0:C}", Convert.ToInt32(numba)) 

Questo darà mi

$5,213.00 

ma io non voglio che il" .00" .

So che posso rilasciare gli ultimi tre caratteri della stringa ogni volta per ottenere l'effetto, ma sembra che ci dovrebbe essere un modo più semplice.

+8

numba è un brutto nome per una variabile ... Un altro carattere ti avrebbe dato "numero" –

+28

Omar è corretto, tuttavia "numero" è anche un nome da merda per una variabile. –

risposta

83

Primo: non conservare la valuta in un double - utilizzare invece decimal. Ogni volta. Quindi utilizzare "C0" come di formato:

decimal numba = 5212.6312M; 
string s = numba.ToString("C0"); 
+1

Nessun punto mobile deve essere utilizzato come campo di valuta. Un numero intero che memorizza in centesimi/centesimo/unità di valuta minima consentita è l'unico modo per evitare errori di arrotondamento (e una libreria BigInt se hai bisogno di numeri oltre una gamma di valori lunghi :)) – workmad3

+4

Un numero intero ha problemi di arrotondamento simili al decimale ... decimale è essenzialmente un numero intero con un specificatore di precisione. La maggior parte delle cose che puoi fare con int puoi fare con decimal, più il decimale è a 96 bit (piuttosto che 32 o 64 per int e long). La maggior parte delle valute si adatta a 96 bit ... –

+0

In secondo luogo, il divieto di utilizzare i doppi per la valuta. L'imprecisione può portare a problemi e, se abbastanza gravi, audit. –

5
Console.WriteLine(numba.ToString("C0")); 
23

Questo dovrebbe fare il lavoro:

String.Format("{0:C0}", Convert.ToInt32(numba)) 

Il numero dopo la C specifica il numero di cifre decimali da includere.

Ho il sospetto che vogliate davvero utilizzare il tipo decimal per la memorizzazione di tali numeri.

+2

+1. Questo fa il trucco perfettamente. – nickb

3

penso che il modo giusto per raggiungere il tuo obiettivo è con questo:

Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalDigits = 0; 

e solo allora si dovrebbe fare la chiamata Formato:

String.Format("{0:C0}", numba) 
3
decimal value = 0.00M; 
     value = Convert.ToDecimal(12345.12345); 
     Console.WriteLine(".ToString(\"C\") Formates With Currency $ Sign"); 
     Console.WriteLine(value.ToString("C")); 
     //OutPut : $12345.12 
     Console.WriteLine(value.ToString("C1")); 
     //OutPut : $12345.1 
     Console.WriteLine(value.ToString("C2")); 
     //OutPut : $12345.12 
     Console.WriteLine(value.ToString("C3")); 
     //OutPut : $12345.123 
     Console.WriteLine(value.ToString("C4")); 
     //OutPut : $12345.1235 
     Console.WriteLine(value.ToString("C5")); 
     //OutPut : $12345.12345 
     Console.WriteLine(value.ToString("C6")); 
     //OutPut : $12345.123450 

click to see Console Out Put screen

Spero che questo può aiutare ...

Grazie. :)

Problemi correlati