Dziwne formatowanie liczb w locale `pl-PL`

Dziwne formatowanie liczb w locale `pl-PL`
KM
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:473
0

O do Anielki, to już Polacy nie umieją oddzielać cyfr kropkami dla lepszej czytelności??

Kopiuj
m@m-X555LJ ~ $ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'C')
'C'
>>> locale.format('%d', 123456789, grouping=True)
'123456789'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.format('%d', 123456789, grouping=True)
'123,456,789'
>>> locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8')
'pl_PL.UTF-8'
>>> locale.format('%d', 123456789, grouping=True)
'123456789'

Dlaczego wypisuje niepogrupowane cyferki, 123456789 a nie 123 456 789?

Nawet nie wiem, kto to standaryzuje… Czy takie rzeczy, jaki dać separatar, leżą w gestii Pythona, czy to ustala POSIX, czy może ISO-ileśtam, czy jest to może konfiguracja każdego komputera z osobna?

Da się jakoś doprowadzić to do działania czy raczej trzeba to przyjąć na bo tak i że nie będzie lepiej?

edytowany 2x, ostatnio: kmph
somekind
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Wrocław
0

Nie mam pojęcia, kim są ci Twoi "polacy", ale musieliby być nieźle upośledzeni, żeby używać kropki jako separatora tysięcy. Całe szczęście, że jestem Polakiem i nie muszę robić takich głupot.

Co do pytania - nikt nie standaryzuje, widocznie twórcy Pythona znają się na polskim zapisie równie dobrze jak i Ty.

KM
Hmm... To jak Ty byś zapisał taką liczbę jak 1234567890? Całe życie źle się uczyłem i w szkole mi głupstwa nagadano – możliwe, ale w takim razie dajcie spację zamiast kropki
somekind
Tak, właśnie spacje a nie jakieś niemieckie kropki nienawiści. :P
Althorion
„Niemieckie Kropki Nienawiści” to by była świetna nazwa dla zespołu punkowego. Może nawet „Nïëmïëckïë kröpkï nïënawïścï”…
Althorion
Moderator C/C++
  • Rejestracja:ponad 10 lat
  • Ostatnio:29 dni
  • Postów:1620
0

Ta, ICU to ustala:

Kopiuj
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "pl_PL.UTF-8")
'pl_PL.UTF-8'
>>> locale.localeconv()
{'currency_symbol': 'zł',
 'decimal_point': ',',
 'frac_digits': 2,
 'grouping': [],
 'int_curr_symbol': 'PLN ',
 'int_frac_digits': 2,
 'mon_decimal_point': ',',
 'mon_grouping': [3, 3, 0],
 'mon_thousands_sep': '.',
 'n_cs_precedes': 0,
 'n_sep_by_space': 1,
 'n_sign_posn': 1,
 'negative_sign': '-',
 'p_cs_precedes': 0,
 'p_sep_by_space': 1,
 'p_sign_posn': 1,
 'positive_sign': '',
 'thousands_sep': ''}

Z tego co wiem, nie można tego edytować w locie.

A, i na bogów: jak już będziesz rozdzielał, to nie spacją ' ' (U+0020), tylko spacją nierozdzielającą ' ' (U+00A0). Nie ma nic bardziej irytującego, niż liczba przełamana na końcu linii…

edytowany 2x, ostatnio: Althorion
Zobacz pozostały 1 komentarz
Althorion
Przy zapisie kwot pieniężnych tylko, ale tak. Podzielam oburzenie.
hauleth
Jak podajesz pojedyncze znaki (zwłaszcza białe), to IMHO warto w nawiasie podać ich notację heksadecymalną lub codepoint Unicode.
Althorion
To bym musiał w sieci szukać… Ale w sumie racja.
hauleth
Spacja to 0x20 a NBSP U+00A0
Althorion
Tak, dzięki, już znalazłem. I byłem o 33 sekundy szybszy. ;)
KM
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:473
0

Łohoho, cóż żem ja znalazł…

https://sourceware.org/bugzilla/show_bug.cgi?id=16777

Ktoś wypełnił buga by wstawiono non-breaking space miast tych kropek albo braku separatora. ALe zdaje się że decydenci niezbyt chętni ;/

KM
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:473
0
kmph napisał(a):

Łohoho, cóż żem ja znalazł…

https://sourceware.org/bugzilla/show_bug.cgi?id=16777

Ktoś wypełnił buga by wstawiono non-breaking space miast tych kropek albo braku separatora. ALe zdaje się że decydenci niezbyt chętni ;/

Jednak!

https://sourceware.org/bugzilla/show_bug.cgi?id=16777

https://sourceware.org/bugzilla/attachment.cgi?id=10537&action=diff

Chyba wreszcie naprawione?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.