Jak możesz nawet sam zauważyć, kultur na świecie jest bardzo dużo: National Language Support (NLS) API Reference i może gdybyś poznał styl formatowania liczby każdej kultury, mógłbyś napisać uniwersalny kod. Jednak programiści w M$ wiedząc to wszystko postanowili, że uniwersalny kod będzie odwoływał się do ustawień regionalnych hosta. W ten sposób, dopóki trzymasz się reguł danej kultury (ustalonej w ustawieniach regionalnych) kod będzie się sprawdzał.
Teraz używasz u siebie "," jako separatora dziesiętnego. Pomyślisz pewnie o biednych Arabach, którzy używają "." i o swoim programie. Otóż taki Arab na 99% będzie miał ustawiony format Arabski zgodny z jego notacją oraz na 120% nie będzie to format Polski. Przy formacie arabskim twój program prawidłowo odczyta liczbę z ".", zaś przy polskim liczbę z ",". Wszystko będzie działać dobrze, dopóki użytkownik będzie stosował się do własnych ustawień regionalnych - za co ty nie jesteś odpowiedzialny jako programista. Jednakże wystąpienie wyjątku powinieneś obsłużyć.
(1) Na upartego możesz dać użytkownikowi wybór wg jakiej kultury ma sprawdzać liczbę niezależnie od jego ustawień regionalnych albo (2) zakombinować rozwiązanie z tym, co nakreślił .
Osobiście pozostałbym przy kodzie bez używania CultureInfo
, bowiem dobro programisty, który używa "." dla liczb zmiennoprzecinkowych w kodzie, nie jest koniecznie dobrem użytkowników tego programu. Jeśli jednak podoba ci się używanie kropki wszędzie, to po prostu zmień własne ustawienia regionalne.
mK. 2013-03-28 21:39
Mam ustawione Format: Polski :) Po prostu myślałem, że można w dosyć łatwy sposób ustawić by kropka była tak samo przyjmowana jak przecinek ale jeżeli takiej opcji nie ma, to temat do zamknięcia.
(3) Inaczej kreuje się sytuacja, w której tworzysz program wyłącznie dla siebie. Możesz wtedy próbować odczytać liczbę z określoną kulturą pl-PL
, a podczas wyjątku spróbować odczytać ją z kulturą en-US
.