Ustawienia regionalne polskiego systemu Windows jako separator dziesiętny liczb przyjmują symbol przecinka. Oczywiście, każda aplikacja powinna być napisana tak, aby niezależnie od otoczenia działała prawidłowo. Czasami może się więc przydać, by nasza aplikacja korzystała z formatu liczb (czy innego elementu związanego z ustawieniami regionalnymi) wymuszonego przez nas, a nie nadanego przez system.
Kropka może stanowić problem przy konwersji stringów na liczby, czy też przy budowaniu zapytań SQL. W końcu dla SQLa przecinek jest separatorem kolumn w zapytaniu, wykonanie więc zapytania zawierającego liczbę zawierającą separator dziesiętny w postaci przecinka niewątpliwie skończy się błędem. Oczywiście, w przypadku .NET warto wykorzystywać SqlParameter, a nie budować zapytania SQL w stringu.
Programiści Delphi czy CBuildera dysponują kilkoma zmiennymi globalnymi, które pozwalają na manipulację ustawieniami regionalnymi systemu, takimi jak: DecimalSeparator (separator dziesiętny), ThousandSeparator (separator tysięcy).
W przypadku C# nie mamy takich globalnych zmiennych jak użytkownicy kompilatorów Borlanda. Ale dysponujemy klasą CultureInfo (System.Globalization), która odpowiada za wszelkie ustawienia regionalne. Klasa dostarcza nie tylko informacji o formacie liczb (NumerFormatInfo), ale też o formacie daty i czasu (DateTimeFormatInfo) czy porównywaniu stringów (CompareInfo).
Przejdźmy więc do meritum. Gdy przy standardowych, polskich ustawieniach regionalnych uruchomimy kod:
string testString = "123.45"; double testDouble = Convert.ToDouble(testString);
//Pobieramy bieżące ustawienia string currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name; CultureInfo ci = new CultureInfo(currentCulture); //Ustawiamy nowy format ci.NumberFormat.NumberDecimalSeparator = "."; System.Threading.Thread.CurrentThread.CurrentCulture = ci;
|
|