2013-04-09 16 views
11

Ho un semplice problema con l'analisi decimale. Il seguente codice funziona correttamente sul mio computer ma quando pubblico il progetto sul server (VPS, edizione standard di Windows Server 2008 R2) viene visualizzato l'errore "La stringa di input era nel formato errato." Qualche idea, cosa c'è che non va?Errore formato stringa decimale.Parse e errato

negozio

io che analizzato il numero nella tabella DB MySQL - il tipo di colonna è il codice DECIMAL(10, 4)

Fonte:

CultureInfo nonInvariantCulture = new CultureInfo("en-AU"); //or pl-PL 
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = "."; 
Thread.CurrentThread.CurrentCulture = nonInvariantCulture; 
string toConvert = ("3,4589").Replace(",", "."); //it's an example 
decimal parsed = decimal.Parse(toConvert); 
+2

Sei sicuro che la macchina in questione ha colture en-AU (o pl_PL) installate? In una nuova installazione, la maggior parte delle macchine ha solo i sottoinsiemi inglesi installati di default. – nvoigt

+0

se questa finestra o applicazione web è? – Smaug

+0

Ramesh Muthiah >> è un'applicazione web – Tony

risposta

21

Se si sa che la rappresentazione di stringa del numero utilizza virgola come separatore decimale è possibile analizzare il valore utilizzando una consuetudine NumberFormatInfo:

var number = "3,4589"; 
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," }; 
var value = Decimal.Parse(number, numberFormatInfo); 

Puoi anche utilizzare uno CultureInfo esistente per una cultura che funzionerà come pl-PL ma penso che sia più facile da capire.

Se d'altra parte il formato del numero è 3.4589 si può semplicemente utilizzare CultureInfo.InvariantCulture che si può considerare una sorta di cultura "default" sulla base di en-US:

var number = "3.4589"; 
var value = Decimal.Parse(number, CultureInfo.InvariantCulture); 
4

È possibile costruire un costume NumberFormatInfo a analizzare il valore della

qualcosa su queste linee

NumberFormatInfo numinf = new NumberFormatInfo(); 
numinf.NumberDecimalSeparator= ",";  
decimal.Parse("3,4589", numinf); 
4

Credo che per un lavoro intorno al di sotto il codice risolverà il problema.

decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture); 
Problemi correlati