부동 소수점 숫자를 특정 정밀도로 변환 한 다음 문자열로 복사


144

부동 소수점 숫자가 135.12345678910있습니다. 해당 값을 문자열에 연결하고 싶지만 만 원합니다 135.123456789. 인쇄하면 다음과 같은 작업을 수행하여 쉽게 수행 할 수 있습니다.

print "%.9f" % numvar

numvar내 원래 수있는. 이 작업을 수행하는 쉬운 방법이 있습니까?


3
%는 정확히 그렇게한다-%는 인쇄 함수의 일부가 아니라 문자열이다- 파이썬 문서를
michael_s

답변:


177

Python <3 (예 : 2.6 [주석 참조] 또는 2.7)에서는 두 가지 방법이 있습니다.

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

그러나 3 이상의 Python 버전 (예 : 3.2 또는 3.3)의 경우 옵션 2가 선호 됩니다.

옵션 2에 대한 자세한 내용 은 Python 설명서의 문자열 형식에 대한 링크를 제안 합니다 .

옵션 1에 대한 자세한 정보는 이 링크로 충분하고 다양한 플래그에 대한 정보를 제공합니다 .

Python 3.6 (공식적으로 2016 년 12 월에 릴리스 됨)은 f문자열 리터럴을 추가했으며 여기 에서 자세한 정보를 참조하십시오.str.format방법 을 확장합니다 ( f"{numvar:.9f}"원래 문제 를 해결하는 중괄호 사용 ).

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

문제를 해결합니다. 자세한 내용은 @ Or-Duan의 답변을 확인하십시오 . 그러나이 방법은 빠릅니다 .


1
옵션 2는 필드와 서식을 구분하는 newer_method_string = "{:.9f}".format(numvar)데 필요 :합니다. 어쨌든 2.7.5에서 이것을 테스트했습니다.
Caltor

1
Python 2.6의 경우 옵션 2가 있어야합니다 newer_method_string = "{0:.9f}".format(numvar).이 이전 버전의 field_name에 필수 0이 있습니다.
ttq

56

파이썬 3.6

명확하게하기 위해 f 문자열 형식을 사용할 수 있습니다 . 이것은 format메소드 와 거의 동일한 구문을 가지고 있지만 조금 더 멋지게 만듭니다.

예:

print(f'{numvar:.9f}')

새로운 f 문자열에 대한 추가 정보 :

다음은 테스트 된 다양한 메소드의 실행 시간 다이어그램입니다 (위의 마지막 링크부터).

실행 시간


52

사용 round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'

8

서식을 지정하는 인쇄가 아니며 문자열의 속성이므로 사용할 수 있습니다.

newstring = "%.9f" % numvar

또는 새로운 스타일 형식을 사용하십시오. valueString = "{:. 9f}". format (number)
Zaren

8

런타임까지 정밀도를 알 수없는 경우이 다른 형식화 ​​옵션이 유용합니다.

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

3
.format-method 를 사용하려면 다음과 같이 인수를 중첩하여 수행 할 수도 있습니다 '{:.{n}f}'.format(numvar,n=n).
nivk

2

9 자리로 정밀도를 설정하려면 다음을 수행하십시오.

print "%.9f" % numvar

2 자리의 정밀도를 반환합니다.

print "%.2f" % numvar 

2 자리의 정밀도를 반환하고 부동 변환 된 값 :

numvar = 4.2345
print float("%.2f" % numvar) 

-2

str함수는 버그가 있습니다. 다음을 시도하십시오. '0,196553'이 표시되지만 올바른 출력은 '0,196554'입니다. 때문에 str함수의 기본값은 ROUND_HALF_UP입니다.

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")

2
.vs. 은 (는) 무엇인가요 ,? 그리고 그것은 pauliwago의 질문과 어떻게 관련이 있습니까?
Peter Mortensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.