質問

次の正規表現を使用して浮動小数点値を読み取るpythonプログラムがあります

 (-?\d+\.\d+)

float(match.group(1))を使用して値を抽出したら、実際の浮動小数点数を取得します。ただし、数値が1.2345678か1.234か1.2340000かは区別できません。

私が直面している問題は、まったく同じフォーマットで浮動小数点値を再度印刷することです。簡単な解決策は、「分割してカウント」することです。まだ文字列の場合の浮動小数点値、 eg 小数点で分割し、整数部分の長さと小数部分の長さをカウントしてから、フォーマッタを

として作成します
print "%"+str(total_len)+"."+str(fractional_len)+"f" % value

しかし、同じ結果を達成するための標準的な方法をご存知ですか?

役に立ちましたか?

解決

あなたの方法は基本的に正しいです。 文字列の書式設定には、使用頻度の低い * 演算子があり、書式設定サイズに使用できます。以下にコードを示します。

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')

そして出力

1.2345678
1.234
1.2340000

他のヒント

固定精度を維持する場合は、 float の使用を避け、代わりに Decimal を使用します。

>>> 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top