복붙노트

[PYTHON] 파이썬에서 소수 자릿수 지정하기

PYTHON

파이썬에서 소수 자릿수 지정하기

파이썬에서 십진수로 사용자 입력을 받아 들일 때 나는 다음을 사용하고있다 :

#will input meal subtotal  
def input_meal():  
    mealPrice = input('Enter the meal subtotal: $')  
    mealPrice = float (mealPrice)  
    return mealPrice  

입력 된 내용을 정확하게 반환합니다 - $ 43.45 하지만 그 값을 사용하여 세금을 계산하고 표시 할 때는 다음을 사용합니다.

#will calculate 6% tax  
def calc_tax(mealPrice):  
    tax = mealPrice*.06  
    return tax

다음을 사용하여 $ 2.607의 디스플레이를 반환합니다.

mealPrice = input_meal()
tax = calc_tax(mealPrice)
display_data(mealPrice, tax)  

대신 $ 2.61로 설정할 수 있습니까? 용서하십시오, 나는 이것이 기본적인 것들임을 깨닫습니다. 그러나 그것들은 아무것도를 위해 그것을 Intro라고 부르지 않습니다 ...

감사!

해결법

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

    1.값을 보유하려는 방법에 따라이 작업을 수행 할 수있는 몇 가지 방법이 있습니다.

    값을 보유하려는 방법에 따라이 작업을 수행 할 수있는 몇 가지 방법이 있습니다.

    기본 문자열 형식을 사용할 수 있습니다 (예 :

    'Your Meal Price is %.2f' %  mealPrice
    

    2를 필요한 정밀도로 수정할 수 있습니다.

    그러나 돈을 다루고 있기 때문에 정확하게 화폐 단위로 작업하는 quantize라는 멋진 메서드가있는 십진수 모듈을 조사해야합니다. 다음과 같이 사용할 수 있습니다.

    from decimal import Decimal, ROUND_DOWN
    mealPrice = Decimal(str(mealPrice)).quantize(Decimal('.01'), rounding=ROUND_DOWN)
    

    반올림 속성은 순전히 선택 사항입니다.

  2. ==============================

    2.네가 언급 한 두 번째 숫자에 놀랐다. (그리고 요청한 반올림으로 확인한다.) 처음에는 정신 산술에 대한 나의 본능이 나를 실패하기 시작했다고 생각했다. (나는 점점 더 오래 가고있다. 나는 한 번 예리한 기억으로 생각합니다.) -하지만 ... 그렇지만 아직은, 내가 상상했던대로 Python 3.1을 사용하고 복사하여 붙여 넣기를 사용하지 않았다는 것을 확인했습니다.

    네가 언급 한 두 번째 숫자에 놀랐다. (그리고 요청한 반올림으로 확인한다.) 처음에는 정신 산술에 대한 나의 본능이 나를 실패하기 시작했다고 생각했다. (나는 점점 더 오래 가고있다. 나는 한 번 예리한 기억으로 생각합니다.) -하지만 ... 그렇지만 아직은, 내가 상상했던대로 Python 3.1을 사용하고 복사하여 붙여 넣기를 사용하지 않았다는 것을 확인했습니다.

    >>> def input_meal():  
    ...     mealPrice = input('Enter the meal subtotal: $')  
    ...     mealPrice = float (mealPrice)  
    ...     return mealPrice  
    ... 
    >>> def calc_tax(mealPrice):  
    ...     tax = mealPrice*.06  
    ...     return tax
    ... 
    >>> m = input_meal()
    Enter the meal subtotal: $34.45
    >>> print(calc_tax(m))
    2.067
    >>> 
    

    ... 예상대로 - 아직, 당신은 "대신 $ 2.607의 디스플레이를 반환합니다."라고 말하면서 "2 달러를 대신 설정할 수 있습니까?"라는 질문을 제외하고는 두 자릿수를 스와핑하는 오타가 될 수 있습니다. " 그래서 정말로 2.607을 의미하는 것입니다 (다양한 방법으로 2.61로 반올림 될 수 있습니다). 그리고 산술적으로 올바른 결과 인 2.067은 아닙니다. 2.07로 반올림 될 수도 있습니다.

    처음에는 필사본이 필사본에서 발생했다고 상상해 본 다음 실제로 원래의 결과가 아닌 2.607이라는 가짜 입력에서 원하는 반올림을 정신적으로 계산했습니다. 확실히 그럭저럭 나를 당황하게 할 수 있었다! -)

    어쨌든 float을 두 자리 10 진수로 반올림하는 가장 간단한 방법은 두 번째 인수가 2 인 내장 함수 라운드입니다.

    >>> round(2.067, 2)
    2.07
    >>> round(2.607, 2)
    2.61
    

    두 가지 가능성 사이에 정확히 동일한 수의 경우, 수는 반올림합니다.

    >>> round(2.605, 2)
    2.6
    >>> round(2.615, 2)
    2.62
    

    또는 문서에 넣으면 (가장 가까운 정수로 반올림하는 단일 인수 형식의 원형으로 예시)

    그러나 돈에 대한 계산을 위해, 부동 소수점 숫자 대신 십진수 모듈이 제공하는 것에 충실하기 위해 이미 다른 답변에서 제시된 권장 사항을 두 번째로 사용합니다.

  3. ==============================

    3.display_data에 대한 코드를 표시하지 않지만 다음과 같이해야합니다.

    display_data에 대한 코드를 표시하지 않지만 다음과 같이해야합니다.

    print "$%0.02f" %amount
    

    가변 금액에 대한 형식 지정자입니다.

    이것은 초보적인 주제이므로 부동 소수점 반올림 오류는 발생하지 않지만 존재한다는 사실을 알고 있으면 좋습니다.

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

    4.세금 계산을 위해 라운드를 사용할 수 있습니다 (결국 식당에서하는 일입니다).

    세금 계산을 위해 라운드를 사용할 수 있습니다 (결국 식당에서하는 일입니다).

    def calc_tax(mealPrice):  
        tax = round(mealPrice*.06,2)
        return tax
    

    데이터를 표시하려면 여러 줄의 문자열과 문자열 형식의 메서드를 사용할 수 있습니다.

    def display_data(mealPrice, tax):
        total=round(mealPrice+tax,2)
        print('''\
    Your Meal Price is {m:=5.2f}
    Tax                {x:=5.2f}
    Total              {t:=5.2f}
    '''.format(m=mealPrice,x=tax,t=total))
    

    이전 버전의 구식 문자열 보간 %을 사용해야 할 경우 형식 메서드가 Python 2.6에서 도입되었습니다.

        print('''\
    Your Meal Price is %5.2f
    Tax                %5.2f
    Total              %5.2f
    '''%(mealPrice,tax,total))
    

    그때

    mealPrice=input_meal()
    tax=calc_tax(mealPrice)
    display_data(mealPrice,tax)
    

    수율 :

    # Enter the meal subtotal: $43.45
    # Your Meal Price is 43.45
    # Tax                 2.61
    # Total              46.06
    
  5. ==============================

    5.이 표준 라이브러리 솔루션은 질문이 너무 오래되어 언급되지 않았을 가능성이 큽니다. 이러한 답변은 다른 수준의 소문자가 필요한 통화 이외의 다른 유스 케이스로 확장 될 수 있지만 통화에 필요하다고 판단됩니다.

    이 표준 라이브러리 솔루션은 질문이 너무 오래되어 언급되지 않았을 가능성이 큽니다. 이러한 답변은 다른 수준의 소문자가 필요한 통화 이외의 다른 유스 케이스로 확장 될 수 있지만 통화에 필요하다고 판단됩니다.

    표준 라이브러리 locale.currency 객체를 사용하는 것이 좋습니다. 그것은 통화 표현의 문제를 해결하기 위해 만들어진 것 같습니다.

    import locale
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
    
    locale.currency(1.23)
    >>>'$1.23'
    locale.currency(1.53251)
    >>>'$1.23'
    locale.currency(1)
    >>>'$1.00'
    
    locale.currency(mealPrice)
    

    통화는 다른 나라들에도 일반적으로 적용됩니다.

  6. from https://stackoverflow.com/questions/3221654/specifying-number-of-decimal-places-in-python by cc-by-sa and MIT license