복붙노트

[PYTHON] 숫자에 '소수 자리 표시'천 단위 구분 기호 추가

PYTHON

숫자에 '소수 자리 표시'천 단위 구분 기호 추가

파이썬에서 1000000에서 1.000.000까지 어떻게 포맷합니까? 여기서 '.' 십진 부호 1000 자리 구분 기호입니다.

해결법

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

    1.천 단위 구분 기호를 추가하려면 다음과 같이 작성할 수 있습니다.

    천 단위 구분 기호를 추가하려면 다음과 같이 작성할 수 있습니다.

    >>> '{0:,}'.format(1000000)
    '1,000,000'
    

    그러나 파이썬 2.7 이상에서만 작동합니다.

    형식 문자열 구문을 참조하십시오.

    이전 버전에서는 locale.format ()을 사용할 수 있습니다.

    >>> import locale
    >>> locale.setlocale(locale.LC_ALL, '')
    'en_AU.utf8'
    >>> locale.format('%d', 1000000, 1)
    '1,000,000'
    

    locale.format ()을 사용하면 locale의 천 단위 구분 기호를 사용한다는 이점이 있습니다.

    >>> import locale
    >>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8')
    'de_DE.utf-8'
    >>> locale.format('%d', 1000000, 1)
    '1.000.000'
    
  2. ==============================

    2.나는 그것을 정말로 이해하지 못했다. 그러나 여기에 내가 이해하는 것이있다.

    나는 그것을 정말로 이해하지 못했다. 그러나 여기에 내가 이해하는 것이있다.

    1123000을 1,123,000으로 변환하고 싶습니다. 형식을 사용하여이를 수행 할 수 있습니다.

    http://docs.python.org/release/3.1.3/whatsnew/3.1.html#pep-378-format-specifier-for-thousands-separator

    예:

    >>> format(1123000,',d')
    '1,123,000'
    
  3. ==============================

    3.그냥 여기에 조금 대답을 확장 :)

    그냥 여기에 조금 대답을 확장 :)

    나는 천 단위 구분 기호를 가지고 부동 소수점 숫자의 정밀도를 제한해야했습니다.

    다음 형식 문자열을 사용하면이 작업을 수행 할 수 있습니다.

    > my_float = 123456789.123456789
    > "{:0,.2f}".format(my_float)
    '123,456,789.12'
    

    format () - 지정자의 미니 언어를 설명합니다.

    [[fill]align][sign][#][0][width][,][.precision][type]
    

    출처 : https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language

  4. ==============================

    4.itertools를 사용하면 유연성이 향상됩니다.

    itertools를 사용하면 유연성이 향상됩니다.

    >>> from itertools import zip_longest
    >>> num = "1000000"
    >>> sep = "."
    >>> places = 3
    >>> args = [iter(num[::-1])] * places
    >>> sep.join("".join(x) for x in zip_longest(*args, fillvalue=""))[::-1]
    '1.000.000'
    
  5. ==============================

    5.Mikel의 답변을 바탕으로 필자는 matplotlib 플롯에서 이와 같은 솔루션을 구현했습니다. 나는 그것이 도움이 될지도 모른다라고 생각하는 일부 사람들을 생각했다 :

    Mikel의 답변을 바탕으로 필자는 matplotlib 플롯에서 이와 같은 솔루션을 구현했습니다. 나는 그것이 도움이 될지도 모른다라고 생각하는 일부 사람들을 생각했다 :

    ax=plt.gca()
    ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))
    
  6. ==============================

    6.다음은 단지 다른 대답입니다. 분할 연산자를 파이썬과 이상한 논리를 통해 사용할 수 있습니다. 여기에 코드가있다.

    다음은 단지 다른 대답입니다. 분할 연산자를 파이썬과 이상한 논리를 통해 사용할 수 있습니다. 여기에 코드가있다.

    i=1234567890
    s=str(i)
    str1=""
    s1=[elm for elm in s]
    if len(s1)%3==0:
        for i in range(0,len(s1)-3,3):
            str1+=s1[i]+s1[i+1]+s1[i+2]+"."
        str1+=s1[i]+s1[i+1]+s1[i+2]
    else:
        rem=len(s1)%3
        for i in range(rem):
            str1+=s1[i]
        for i in range(rem,len(s1)-1,3):
            str1+="."+s1[i]+s1[i+1]+s1[i+2]
    
    print str1
    

    산출

    1.234.567.890
    
  7. ==============================

    7.이상한 사람은 정규식에 대한 간단한 해결책을 언급하지 않았다.

    이상한 사람은 정규식에 대한 간단한 해결책을 언급하지 않았다.

    import re
    print(re.sub(r'(?<!^)(?=(\d{3})+$)', r'.', "12345673456456456"))
    

    다음 출력을 제공합니다.

    12.345.673.456.456.456
    

    쉼표 앞에있는 숫자 만 분리하려는 경우에도 작동합니다.

    re.sub(r'(?<!^)(?=(\d{3})+,)', r'.', "123456734,56456456")
    

    제공 :

    123.456.734,56456456
    

    regex는 Lookahead를 사용하여 주어진 위치 이후의 자릿수가 3으로 나눌 수 있는지 확인합니다.

  8. from https://stackoverflow.com/questions/5513615/add-decimal-mark-thousands-separators-to-a-number by cc-by-sa and MIT license