문제

가 프로그램을 읽는 소수점 값을 사용하여 다음과 같은 정규 표현식

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

일단 값을 추출을 사용하여 플로트(일치합니다.group(1)),내가 실제 부동 소수입니다.그러나 나는 할 수 없을 구별하는 경우에는 수 1.2345678 또는 1.234 또는 1.2340000.

문제 내가 직면하는 인쇄한 부동 소수점의 값으로 다시 동 서식을 지정합니다.는 쉽게 해결책은"분할 및 횟수"유동점의 값을 때 여전히,문자열 분할에서 진수,지점 및 계산 정수 부 길이와 분수 부분 길이드 포맷으로

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

다른 팁

을 유지하려는 경우 고정 정밀도를 사용하지 마십시오 floats 및 사용 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