Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > dk.edb.programmering > #63
| From | Bertel Lund Hansen <gadekryds@lundhansen.dk> |
|---|---|
| Newsgroups | dk.edb.programmering |
| Subject | [Python] Ulogisk talformatering |
| Date | 2018-04-06 19:08 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <1pyw3kvikpakm$.dlg@lundhansen.dk> (permalink) |
Jeg mener at Python er ulogisk på et bestemt punkt, og det
bevirker at jeg er nødt til at skrive en subrutine der udfører
noget som burde være indbygget i sproget. Det drejer sig om
formatering af tal.
Hvis man stiller locale correct, så vil {:n} frembringe et tal
med korrekt decimalkomma og tusindseparator. Selv om n står for
"naturligt tal", så virker det dog alligevel på decimaltal - men
man kan ikke sætte antallet af decimaler!
En rutine, der skal lappe på det, ser sådan ud:
def number_format (nr,unit,dec=0):
if not dec:
temp="{:n}".format(int(nr)).replace(".","'")
else:
temp="{:.2f}".format(nr).replace(",","'").replace(".",",")
return temp+' '+unit
idet jeg dog har den særhed at jeg bruger apostrof som
tusindseparator i stedet for punktum.
Bemærk at den kun virker korrekt for tal med decimaler hvis
tallet er mindre end 1000. f-formatet sætter nemlig ikke
tusindseparator. Hvis rutinen skulle være helt generel, skulle
den kun bruge n-format og 'manuelt' evt. tilføje decimalkomma og
evt. 0'er og derefter afskære det korrekte antal decimaler.
Det ville være meget nemmere hvis man kunne skrive:
return "{:.2n}".format(nr).replace(".","'")
--
/Bertel
Back to dk.edb.programmering | Previous | Next | Find similar
[Python] Ulogisk talformatering Bertel Lund Hansen <gadekryds@lundhansen.dk> - 2018-04-06 19:08 +0200
csiph-web