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?

War es hilfreich?

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 floats 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top