2013-04-09 10 views
11

Mam prosty problem z analizą dziesiętną. Poniższy kod działa poprawnie na moim komputerze, ale kiedy publikuję projekt na serwerze (VPS, standardowa wersja Windows Server 2008 R2) pojawia się błąd "Ciąg wejściowy był w nieprawidłowym formacie." Jakieś pomysły, co jest nie tak?Decimal.Parse i niepoprawny format łańcucha znaków

przechowywać że analizowany numer w tabeli MySQL DB - typ kolumna Kod DECIMAL(10, 4)

Źródło:

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

Czy na pewno maszyna ma zainstalowane kultury en-AU (lub pl_PL)? W przypadku nowej instalacji większość komputerów ma domyślnie zainstalowane tylko angielskie podzbiory. – nvoigt

+0

, czy to jest okno lub aplikacja internetowa? – Smaug

+0

Ramesh Muthiah >> to aplikacja internetowa – Tony

Odpowiedz

21

Jeśli wiesz, że reprezentacja ciąg liczby używa przecinka jako separator dziesiętny można przeanalizować wartość za pomocą niestandardowego

var number = "3,4589"; 
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," }; 
var value = Decimal.Parse(number, numberFormatInfo); 
Można również użyć istniejącej CultureInfo dla kultury, która, jak wiesz, będzie działać tak jak pl-PL, ale myślę, że jest to łatwiejsze do zrozumienia.

Jeśli z drugiej strony format numeru jest 3.4589 można po prostu użyć CultureInfo.InvariantCulture które można rozważyć rodzaj „domyślnej” kultury opartej na en-US:

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

można zbudować zwyczaj NumberFormatInfo do analizować swoją wartość

coś na tych liniach

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

Chyba za obejść poniżej kod rozwiąże problem.

decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture); 
Powiązane problemy