복붙노트

[PYTHON] 떠 다니는 '.0'을 떠내려 라.

PYTHON

떠 다니는 '.0'을 떠내려 라.

나는 문자열 형식으로 숫자를 변환하는 방법을 찾고 있는데, 여분의 '.0'

입력 데이터는 실수와 문자열의 혼합입니다. 원하는 출력 :

0 --> '0'

0.0 --> '0'

0.1 --> '0.1'

1.0 --> '1'

다음 생성기 표현식을 생각해 냈습니다. 그러나 더 빠른 방법이 있는지 궁금합니다.

(str(i).rstrip('.0') if i else '0' for i in lst)

진위 검사는 0이 빈 문자열이되지 않도록 방지합니다.

편집 : 더 많거나 적은 수용 할 수있는 솔루션은 지금이 있습니다.

('%d'%i if i == int(i) else '%s'%i for i in lst)

파이썬에서이 (상당히 간단한) 케이스를 처리하는 우아한 방법이 없다는 것은 이상한 것처럼 보입니다.

해결법

  1. ==============================

    1.

    (str(i)[-2:] == '.0' and str(i)[:-2] or str(i) for i in ...)
    
  2. ==============================

    2.PEP 3101 참조 :

    PEP 3101 참조 :

    'g' - General format. This prints the number as a fixed-point
          number, unless the number is too large, in which case
          it switches to 'e' exponent notation.
    

    구식:

    >>> "%g" % float(10)
    '10'
    

    새 스타일 (권장) :

    >>> '{0:g}'.format(float(21))
    '21'
    
  3. ==============================

    3.rstrip은 원하는 것을하지 않으며 접미사가 아닌 문자를 제거합니다.

    rstrip은 원하는 것을하지 않으며 접미사가 아닌 문자를 제거합니다.

    >>> '30000.0'.rstrip('.0')
    '3'
    

    사실, 단지 '% g'% 내가 원하는 것을 할 것입니다. 편집 : 로버트 그의 코멘트에서 6 유효 자릿수가 % g의 기본 정밀도를 사용하므로 큰 숫자를 작동하지 않습니다 지적했다.

    str (i)는 12 자리 유효 숫자를 사용하므로 다음과 같이 작동합니다.

    >>> numbers = [ 0.0, 1.0, 0.1, 123456.7 ]
    >>> ['%.12g' % n for n in numbers]
    ['1', '0', '0.1', '123456.7']
    
  4. ==============================

    4.

    >>> x = '1.0'
    >>> int(float(x))
    1
    >>> x = 1
    >>> int(float(x))
    1
    
  5. ==============================

    5.

    def floatstrip(x):
        if x == int(x):
            return str(int(x))
        else:
            return str(x)
    

    하지만 파이썬이 0.10000000000000001 시스템에서 부정확 한 부동 소수점으로 0.1을 나타냅니다.

  6. ==============================

    6.예제에서와 같이 소수 자릿수 1 자리 만 신경 써야한다면 다음과 같이하면됩니다.

    예제에서와 같이 소수 자릿수 1 자리 만 신경 써야한다면 다음과 같이하면됩니다.

    ("%.1f" % i).replace(".0", "")
    

    숫자를 소수점 1 자리의 문자열로 변환 한 다음 0 인 경우 제거합니다.

    >>> ("%.1f" % 0).replace(".0", "")
    '0'
    >>> ("%.1f" % 0.0).replace(".0", "")
    '0'
    >>> ("%.1f" % 0.1).replace(".0", "")
    '0.1'
    >>> ("%.1f" % 1.0).replace(".0", "")
    '1'
    >>> ("%.1f" % 3000.0).replace(".0", "")
    '3000'
    >>> ("%.1f" % 1.0000001).replace(".0", "")
    '1'
    
  7. ==============================

    7.저기서 너무 추한 ...

    저기서 너무 추한 ...

    개인적으로 좋아하는 것은 float (= 실제로는 정수) 일 필요가없는 float를 int로 변환하여 쓸모없는 후행 0을 제거하는 것입니다

    (int (i) if i.is_integer () else i for i)

    그런 다음 정상적으로 인쇄 할 수 있습니다.

  8. ==============================

    8.

    from decimal import Decimal
    '%g' % (Decimal(str(x)))
    
  9. ==============================

    9.integer 값을 int로 갖는 float를 출력하려면 :

    integer 값을 int로 갖는 float를 출력하려면 :

    format = "%d" if f.is_integer() else "%s"
    print(format % f)
    

                 0.0 -> 0
                 0.1 -> 0.1
                10.0 -> 10
          12345678.9 -> 12345678.9
         123456789.0 -> 123456789
    12345678912345.0 -> 12345678912345
    12345678912345.6 -> 1.23456789123e+13
      1.000000000001 -> 1.0
    
  10. ==============================

    10.파이썬의 문자열 포맷팅 사용하기 (파이썬 3.0에서 str.format () 사용) :

    파이썬의 문자열 포맷팅 사용하기 (파이썬 3.0에서 str.format () 사용) :

    from decimal import Decimal
    
    def format_number(i):
        return '%g' % (Decimal(str(i)))
    
  11. ==============================

    11.

    str(x)[-2:] == '.0' and int(x) or x
    
  12. ==============================

    12.다음 코드는 변수 no의 내용을 그대로 45.60으로 변환합니다. str을 사용하면 출력은 45.6이됩니다.

    다음 코드는 변수 no의 내용을 그대로 45.60으로 변환합니다. str을 사용하면 출력은 45.6이됩니다.

    no = 45.60
    
    strNo = "%.2f" %no
    
  13. ==============================

    13.

    >>> '%g' % 0
    '0'
    >>> '%g' % 0.0
    '0'
    >>> '%g' % 0.1
    '0.1'
    >>> '%g' % 1.0
    '1'
    
  14. ==============================

    14.FWIW, Jinja2와 함께, var = 10.3

    FWIW, Jinja2와 함께, var = 10.3

    {{var | round | int}}는 정수 10을 내 보냅니다.

    round (method = 'floor') 및 round (method = 'ceil')도 사용할 수 있습니다.

    그래서 var2 = 10.9였습니다. {{var | round (method = 'floor') | int}}는 여전히 정수 10을 내 보냅니다

    round 함수의 키워드 인수 precision = 0을 사용하여 정밀도를 제어 할 수도 있습니다.

    ref : http://jinja.pocoo.org/docs/dev/templates/#round

  15. ==============================

    15.내가 json 사전 (API에서 반환)에서 값을 다루고 있었다. 위의 모든 것들이 나를 도우려는 것이 아니라 스스로 도우미 기능으로 만들었습니다. 모든 후행 0을 자릅니다.

    내가 json 사전 (API에서 반환)에서 값을 다루고 있었다. 위의 모든 것들이 나를 도우려는 것이 아니라 스스로 도우미 기능으로 만들었습니다. 모든 후행 0을 자릅니다.

    나는 그것이 누군가를 돕기를 희망한다.

    def remove_zeros(num):
        nums = list(num)
        indexes = (list(reversed(range(len(nums)))))
        for i in indexes:
            if nums[i] == '0':
                del nums[-1]
            else:
                break
        return "".join(nums)
    
    num = "0.000000363000"
    print(remove_zeros(num))
    

    지문 :

        0.000000363
    
  16. ==============================

    16.0 정밀도를 입력하고 원하는 경우 마침표를 추가하십시오. EG "% .0f."

    0 정밀도를 입력하고 원하는 경우 마침표를 추가하십시오. EG "% .0f."

    >>> print "%.0f."%1.0
    1.
    >>> 
    
  17. from https://stackoverflow.com/questions/385325/dropping-trailing-0-from-floats by cc-by-sa and MIT license