Kropka zamiast przecinka w liczbach

0
harbii napisał(a):

Moje rozwiązanie:

odczyt z mysql

wartosc = Convert.ToDouble(Poz["wartosc"]);

zamiana na kropkę

string wartoscs = Convert.ToString(wartosc);
wartoscs = wartoscs.Replace(",", ".").Replace(".", ".");

Dzięki

  1. Już od początku, bazę masz dziwną / dziwnie obsługujesz. Nie ma tam pola liczbowego? To by było chore.
  2. Twoje rozwiązanie zaprzecza pierwotnemu celowi, jaki zadeklarowałeś (liczba double), Zmieniasz założenia na string. Czyli głównym błędem jaki zwalczasz jesteś sam Ty. Zresztą złączenie tych fragmentów kodu, które widzimy, by się nie kompilowało.
  3. bez pełnego kodu to zabawa w ciuciubabkę.
4
harbii napisał(a):

zamiana na kropkę

string wartoscs = Convert.ToString(wartosc);
wartoscs = wartoscs.Replace(",", ".").Replace(".", ".");

Tak się tego nie robi.

Tak się robi:

          string wartoscs = Convert.ToString(wartosc, CultureInfo.InvariantCulture);
0

A ja dodam to swoje pytanie czy na początku projektu warto od razu ustawić język regionu aplikacji na angielski by w przyszłości uniknąć chociażby problemów z wczytywaniem danych z html( pamiętam że sam miałem problem że z widoku od inputa przychodziła mi wartość z kropką jako separator.

5

Nie, chyba że piszesz ją tylko na swój użytek. ToString powinno być stosowane tylko do prezentacji danych użytkownikowi, a wtedy dobrze gdy jest sformatowane według jego ustawień w systemie. Jeśli musisz użyć z jakiegoś powodu ToString żeby przesłać dane dalej w innym formacie to stosujesz InvariantCulture

Użytkownik też powinien podawać dane w swoim lokalnym formacie, a wtedy do parsowania powinno służyć zwykłe Parse czy Convert bez parametrów. Niestety większość programów robi to źle i wymaga na przykład kropki wszędzie i niektórzy użytkownicy sami próbują wpisywać wszędzie kropkę nawet gdy są z kraju gdzie obowiązuje przecinek. Przez to często przed parsowaniem niestety trzeba zamienić przecinek na kropkę bo nie wiadomo w jakim języku do nas użytkownik mówi a potem otwierają tickety zamiast się nauczyć pisać przecinek.

Excel już w ogóle robi to źle bo zapisuje pliki .csv w lokalnym formacie, przez co plik zapisany w jednym kraju nie chce się potem dobrze otworzyć w innym kraju. Nie mówiąc że nazwy funkcji w formułach arkusza są w lokalnym języku którego excel z innego kraju nie rozumie (poprawili to?)

0
Phoryn napisał(a):

A ja dodam to swoje pytanie czy na początku projektu warto od razu ustawić język regionu aplikacji na angielski

I co, każdemu użytkownikowi powiesz, że ma sobie ustawić angielski?

Zresztą zdarzają się takie źle napisane aplikacje które przy innym niż kropka ustawieniu systemowym się zawieszają albo wywalają wyjątek.
Nie idź tą drogą.

1
obscurity napisał(a):

Excel już w ogóle robi to źle bo zapisuje pliki .csv w lokalnym formacie, przez co plik zapisany w jednym kraju nie chce się potem dobrze otworzyć w innym kraju. Nie mówiąc że nazwy funkcji w formułach arkusza są w lokalnym języku którego excel z innego kraju nie rozumie (poprawili to?)

A widziałeś kiedykolwiek, że nie rozumie?

Tak komórka wygląda w Excelu 2010:

a.png

a tak jest zdefiniowana w pliku .xlsx (po rozpakowaniu zipem):

b.png

1

Temat do perełek?

0
Azarien napisał(a):
harbii napisał(a):

zamiana na kropkę

string wartoscs = Convert.ToString(wartosc);
wartoscs = wartoscs.Replace(",", ".").Replace(".", ".");

Tak się tego nie robi.

Tak się robi:

          string wartoscs = Convert.ToString(wartosc, CultureInfo.InvariantCulture);

Dziękuję za poprawienie.

1

Witam,

Może zacznij od tego jak pobierasz dane z bazy danych bo jakoś widzę tutaj podwójną konwersję bez zastanowienia się nad tym jakie są ustawienia "lokalizacyjne". Co zaś tyczy się generowania XML-a to może zobacz jak używa się serializacji zamiast robienie tego z palca.

Pozdrawiam,
mr-owl

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0