부동 소수점 번호를 특정 정밀도로 변환한 다음 문자열로 복사
부동소수점 번호가 있어요.135.12345678910
해당 값을 문자열로 연결하고 싶지만, 원하는 것은135.123456789
인쇄를 사용하면 다음과 같은 작업을 쉽게 수행할 수 있습니다.
print "%.9f" % numvar
와 함께numvar
제 원래 번호입니다.이것을 하는 쉬운 방법이 있습니까?
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에 대한 자세한 내용은 이 링크로 충분하며 다양한 플래그에 대한 정보가 있습니다.
파이썬 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의 답변을 확인하십시오. 하지만 이 방법은 빠릅니다.
파이썬 3.6
확실히 하기 위해, 당신은 f-string 포맷을 사용할 수 있습니다.이 구문은 다음과 거의 같습니다.format
방법, 하지만 조금 더 좋게 해주세요.
예:
print(f'{numvar:.9f}')
새 f 문자열에 대한 자세한 내용:
다음은 다양한 테스트 방법의 실행 시간 다이어그램입니다(위의 마지막 링크 참조).
사용.round
:
>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
런타임이 될 때까지 정밀도를 알 수 없는 경우 다음과 같은 다른 형식 지정 옵션이 유용합니다.
>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
포맷을 하는 것은 인쇄가 아니라 문자열의 속성이므로 그냥 사용할 수 있습니다.
newstring = "%.9f" % numvar
9자리로 정밀도를 설정하려면 다음을 얻습니다.
print "%.9f" % numvar
두 자리의 정밀도를 반환합니다.
print "%.2f" % numvar
2자리 숫자와 부동 변환된 값으로 정밀도 반환:
numvar = 4.2345
print float("%.2f" % numvar)
소수점 수가 범위 내에 있는 한 작동하며, 이후에는 하드웨어에 따라 다릅니다.소수점 14위 이상에서는 일치하지 않았습니다.디지털 고도 파일의 위도 값
https://docs.python.org/3/tutorial/floatingpoint.html
lat1 = -81.0016666666670072
lat2 = -81.0016666666670062
assert lat1 == lat2 # no asserion error :(
# try with Decimal
from decimal import *
getcontext().prec = 16
assert Decimal(lat1) == Decimal(lat2) # no asserion error :(
# Lets see string representation
print(f"{lat1:.16f}", f"{lat2:.16f}")
# -81.0016666666670062 -81.0016666666670062 :( Perils of Float
# Lets see how it is store in hardware
print(lat1.hex(), lat2.hex())
# -0x1.4401b4e81b500p+6 -0x1.4401b4e81b500p+6
# 14-th position it is able to identify
lat1 = -81.0016666666670162
lat2 = -81.0016666666670062
#-0x1.4401b4e81b501p+6 -0x1.4401b4e81b500p+6
print(lat1.hex(), lat2.hex())
assert lat1 == lat2 # assertion error :)
그str
함수에 버그가 있습니다.다음을 시도하십시오.'0,196553'이 표시되지만 올바른 출력은 '0,196554'입니다.왜냐하면.str
함수의 기본값은 ROUND_HALF_UP입니다.
>>> value=0.196553500000
>>> str("%f" % value).replace(".", ",")
언급URL : https://stackoverflow.com/questions/15263597/convert-floating-point-number-to-a-certain-precision-and-then-copy-to-string
'programing' 카테고리의 다른 글
데이터 유형 생략(예: "unsigned int" 대신 "unsigned") (0) | 2023.06.07 |
---|---|
파이플롯을 사용하여 평활선 그리기 (0) | 2023.06.07 |
Sqlite DB가 Azure Dotnet 핵심 엔터티 프레임워크에서 잠김 (0) | 2023.06.07 |
매개 변수를 사용하는 Bash 별칭을 만드시겠습니까? (0) | 2023.06.07 |
Handling applicationDidBeautive - "앱이 Active가 되었을 때 뷰 컨트롤러가 어떻게 응답할 수 있습니까?" (0) | 2023.06.07 |