Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > dk.edb.programmering > #63

[Python] Ulogisk talformatering

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)

Show all headers | View raw


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


Thread

[Python] Ulogisk talformatering Bertel Lund Hansen <gadekryds@lundhansen.dk> - 2018-04-06 19:08 +0200

csiph-web