2011-10-11 7 views
19

Voglio dire, voglio convertire questo:Come utilizzare Convert.ChangeType() quando conversiontype è decimale e ingresso è "40.00"

string a = "40.00"; 
Convert.ChangeType(a, typeof(decimal)) 

il risultato è un valore decimale di "4000"

il problema è che la chiamata convert è in un metodo generico molto astratto in un convertitore xmlToObject. Non voglio aggiungere a livello di codice lotti di diverse eccezioni per la conversione corretta.

riguarda Chris

+4

Vuol "40,00" convertire correttamente? – Joe

+2

Ragazzi dovete cambiare il vostro uomo di cultura ... – nawfal

risposta

33

Il punto decimale non potrebbe essere rappresentato dal carattere punto nella vostra cultura corrente.

In generale, quando si esegue conversioni cultura-invariante, è meglio specificare CultureInfo.InvariantCulture come IFormatProvider argomento al method:

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture); 
3

La conversione è più probabile fatto usando una cultura che utilizza il periodo come separatore delle migliaia invece del separatore decimale.

Specificare la cultura quando si converte il valore:

Convert.ToDecimal(a, CultureInfo.InvariantCulture) 
2

Il seguente codice

string s = "40.00"; 
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal)); 

rende d = 40. Questo sembra bene per me. Qual è il tuo problema esattamente?

Modifica: Sembra che potresti avere un problema con la cultura utilizzata. Fate questo per la conversione:

string s = "40.00"; 
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture); 
+3

Il problema, come sempre, è che '.' non è sempre il separatore decimale. –

+0

tx per averlo indicato. ho modificato la mia risposta. –

+1

@DavidHeffernan che tipo di cultura raccapricciante è questo: / – nawfal

Problemi correlati