halte gleiche Formatierung für Gleitkommawerte
-
03-07-2019 - |
Frage
Ich habe ein Python-Programm, die Punktwerte mit dem folgenden regulären Ausdruck liest Floating
(-?\d+\.\d+)
, wenn ich den Wert mit Schwimmer (match.group (1)) zu extrahieren, erhalte ich die tatsächliche Gleitkommazahl. Allerdings bin ich nicht in der Lage zu unterscheiden, wenn die Zahl 1.2345678 oder 1.234 oder 1,2340000 ist.
Das Problem, das ich mit Blick auf bin, ist wieder aus dem Fließkommawert zu drucken, mit der exakt gleichen Formatierung. Eine einfache Lösung ist es, „Split und zählen“, um den Fließkommawert, wenn noch eine Zeichenfolge, zB Aufspalten am Dezimalpunkt und Zählen der ganzzahlige Teil der Länge und den Bruchteil der Länge, dann erzeugen die Formatierer, wie
print "%"+str(total_len)+"."+str(fractional_len)+"f" % value
aber vielleicht wissen Sie einen Standard-Weg, um das gleiche Ergebnis zu erzielen?
Lösung
Sie Methode ist grundsätzlich richtig.
String-Formatierung hat eine weniger häufig verwendete *
Operator für die Formatierung Größen setzen können, hier einige Code:
import re
def parse_float(str):
re_float = re.compile(r'(-?)(\d+)\.(\d+)')
grps = re_float.search(str)
sign, decimal, fraction = grps.groups()
float_val = float('%s%s.%s' % (sign, decimal, fraction))
total_len = len(grps.group(0))
print '%*.*f' % (total_len, len(fraction), float_val)
parse_float('1.2345678')
parse_float('1.234')
parse_float('1.2340000')
und es gibt
1.2345678
1.234
1.2340000
Andere Tipps
Wenn Sie eine feste Präzision zu halten, zu vermeiden float
s und verwendet Decimal
statt:
>>> from decimal import Decimal
>>> d = Decimal('-1.2345')
>>> str(d)
'-1.2345'
>>> float(d)
-1.2344999999999999
>>> from decimal import Decimal as d
>>> d('1.13200000')
Decimal('1.13200000')
>>> print d('1.13200000')
1.13200000