2013-07-07 16 views
9

Ho appena saputo che un decimale ricorda in qualche modo quanti traila di zero erano necessari per memorizzare un numero. Con altre parole: ricorda la dimensione della frazione.Come formattare un decimale senza zeri finali

Ad esempio:

123M.ToString() ==> resuls in: 123 
123.00M.ToString() ==> resuls in: 123.00 
123.450M.ToString() ==> resuls in: 123.450 

Cerco una stringa di formattazione o di un altro trucco per sbarazzarsi di quei zeri finali "non necessari", ma mantenendo le cifre significative. Quindi:

123M.ToString() ==> resuls in: 123 
123.00M.ToString() ==> resuls in: 123 
123.450M.ToString() ==> resuls in: 123.45 

rimuovendo gli zeri alla fine della nuova stringa non è una vera opzione per me, perché poi devo scoprire se la stringa contiene una frazione e se è così, bisogna anche rimuovere l'opzione '' o '' a seconda della cultura, ecc

+0

Credo che la migliore risposta su questo argomento è [questo uno] (http://stackoverflow.com/a/7983330/187697) – keyboardP

+0

Possibile duplicato di [Rimuovi zero finali] (http://stackoverflow.com/questions/4525854/remove-trailing-zeros), che è più vecchio e ha risposte e commenti migliori. – Sam

risposta

8

Ci sono diversi modi per farlo, ma dal momento che si sta convertendo in un oggetto String in ogni caso, suppongo che si potrebbe provare qualcosa di simile:

myDecimalVariable.toString("G29");

o, utilizzando il codice di cui sopra, ipotizzando 123.00M è il vostro decimali:

123.00M.toString("G29");

Ecco la spiegazione di come funziona questo esempio concisa:

Il formato G con un numero indica la formattazione di molte cifre significative di . Poiché 29 sono le cifre più significative che un decimale può avere , questo troncerà effettivamente gli zeri finali senza arrotondamento .

+5

Vedere [questo commento] (http://stackoverflow.com/questions/4525854/remove-trailing-zeros/4525896#comment8733932_4525983) per quanto riguarda alcuni casi in cui G29 potrebbe non funzionare come previsto. – keyboardP

+0

Giusto, ma il suo esempio non includeva nessuno di questi casi, quindi ho pensato che sarebbe stato il modo più semplice per ottenere ciò che voleva. Ma è bello saperlo. –

+1

La tua risposta non è sbagliata, ma ho pensato che potesse valere la pena di menzionarla nel caso in cui qualcun altro si imbattesse in questo thread. – keyboardP

-1

basta applicare il formato identificatore zero e rimuoverà lo zeri finali:

string test = (1.23M * 100M).ToString("0"); 
//prints 123. 
string test2 = 123.450M.ToString(".00"); 
//prints 123.45. 
string test3 = 123.450M.ToString().Trim('0'); 
+0

Bel tentativo ... ma non so in anticipo quale valore è all'interno del decimale ... –

+0

Si noti che 'Trim ('0')' risulterà in '0.5m' essendo formattato come' .5' piuttosto che ' 0.5'. – Sam

+0

'Trim ('0')' formatta anche '123.00m' come' 123'. – Sam

Problemi correlati