Programing

Python Decimals 형식

lottogame 2020. 11. 27. 07:38
반응형

Python Decimals 형식


이런 식으로 파이썬 십진수를 포맷하는 좋은 방법은 무엇입니까?

1.00 -> '1'
1.20 -> '1.2'
1.23 -> '1.23'
1.234 -> '1.23'
1.2345 -> '1.23'


Python 2.6 이상이있는 경우 다음을 사용하십시오 format.

'{0:.3g}'.format(num)

Python 2.5 이하 :

'%.3g'%(num)

설명:

{0}format첫 번째 인수를 인쇄하도록 지시 합니다 num. 이 경우 .

콜론 (:) 뒤의 모든 항목은 format_spec.

.3 정밀도를 3으로 설정합니다.

g중요하지 않은 0을 제거합니다. http://en.wikipedia.org/wiki/Printf#fprintf 참조

예를 들면 :

tests=[(1.00, '1'),
       (1.2, '1.2'),
       (1.23, '1.23'),
       (1.234, '1.23'),
       (1.2345, '1.23')]

for num, answer in tests:
    result = '{0:.3g}'.format(num)
    if result != answer:
        print('Error: {0} --> {1} != {2}'.format(num, result, answer))
        exit()
    else:
        print('{0} --> {1}'.format(num,result))

수확량

1.0 --> 1
1.2 --> 1.2
1.23 --> 1.23
1.234 --> 1.23
1.2345 --> 1.23

Python 3.6 이상을 사용하면 다음을 사용할 수 있습니다 f-strings.

In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'

Justin의 대답의 첫 부분 만 정확합니다. .3은 정밀도가 아니라 총 자릿수이므로 "% .3g"사용은 모든 경우에 작동하지 않습니다. 1000.123과 같은 숫자로 시도하면 중단됩니다.

그래서 저는 Justin이 제안한 것을 사용합니다.

>>> ('%.4f' % 12340.123456).rstrip('0').rstrip('.')
'12340.1235'
>>> ('%.4f' % -400).rstrip('0').rstrip('.')
'-400'
>>> ('%.4f' % 0).rstrip('0').rstrip('.')
'0'
>>> ('%.4f' % .1).rstrip('0').rstrip('.')
'0.1'

트릭을 수행하는 함수는 다음과 같습니다.

def myformat(x):
    return ('%.2f' % x).rstrip('0').rstrip('.')

다음은 귀하의 예입니다.

>>> myformat(1.00)
'1'
>>> myformat(1.20)
'1.2'
>>> myformat(1.23)
'1.23'
>>> myformat(1.234)
'1.23'
>>> myformat(1.2345)
'1.23'

편집하다:

다른 사람들의 답변을보고 실험을하면서 g가 당신을 위해 모든 스트리핑 작업을한다는 것을 알았습니다. 그래서,

'%.3g' % x

훌륭하게 작동하며 다른 사람들이 제안하는 것과 약간 다릅니다 ( '{0 : .3}'. format () 항목 사용). 나는 당신의 선택을 생각한다.


Python의 표준 문자열 형식 지정 방법을 사용하십시오 .

>>> "{0:.2}".format(1.234232)
'1.2'
>>> "{0:.3}".format(1.234232)
'1.23'

2.6 미만의 Python 버전을 사용하는 경우

>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'1'

참고 URL : https://stackoverflow.com/questions/2389846/python-decimals-format

반응형