복붙노트

[PYTHON] 소수점 이하의 소수점을 반올림하는 법?

PYTHON

소수점 이하의 소수점을 반올림하는 법?

내가 8.8333333333333339를 가지고 있다고 가정하고 8.84로 변환하고 싶습니다. 어떻게 이것을 파이썬으로 수행 할 수 있습니까? 라운드 (8.833333333333333339, 2)는 8.83을 나타내며 8.84는 아닙니다. 나는 파이썬이나 프로그래밍에 익숙하지 않다.

문자열로 인쇄하고 싶지는 않지만 결과가 더 많이 사용됩니다. 문제에 대한 자세한 내용은 Tim Wilson의 Python Programming Tips : 대출 및 지불 계산기를 확인하십시오.

해결법

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

    1.8.833333333339 (또는 8.833333333333334, 106.00 / 12의 결과) 소수점 두 자리까지 반올림 한 값은 8.83입니다. 수학적으로 원하는 것은 천장 기능입니다. 파이썬의 수학 모듈에있는 이름은 ceil입니다.

    8.833333333339 (또는 8.833333333333334, 106.00 / 12의 결과) 소수점 두 자리까지 반올림 한 값은 8.83입니다. 수학적으로 원하는 것은 천장 기능입니다. 파이썬의 수학 모듈에있는 이름은 ceil입니다.

    import math
    
    v = 8.8333333333333339
    print(math.ceil(v*100)/100)  # -> 8.84
    

    일반적으로 바닥 및 천장 기능은 일반적으로 실수를 소수점 이하 자릿수가 가장 큰 이전 또는 최소의 정수로 매핑합니다. 따라서 소수점 이하 2 자리로 사용하려면 소수점을 이동하기 위해 102 (또는 100)를 곱합니다. 이후 보상에 의해 분할된다.

    어떤 이유로 math 모듈을 사용하고 싶지 않다면 방금 작성한 (최소한 테스트 한)이 구현을 사용할 수 있습니다.

    def ceiling(x):
        n = int(x)
        return n if n-1 < x <= n else n+1
    

    샘플 출력에서 ​​월별 지불액을 반올림 한 것으로 나타나며 이는 많은 사람들이 천장 기능의 효과라고 부르는 것입니다. 즉, 매월 총액의 1/12을 조금 넘는 금액이 지급됩니다. 최종 지불액은 평소보다 약간 작아졌고 미지급 잔액은 8.76 만 남았습니다.

    매월 지불액이 8.83이고 최종 지불액이 8.87 인 정상적인 반올림을 사용하는 것도 똑같이 유효합니다. 그러나 현실 세계에서 사람들은 일반적으로 지불금이 올라 가기를 싫어하므로 각 지불액을 반올림하는 것이 일반적인 관행입니다. 또한 돈을 더 빨리 대출 기관에 반환합니다.

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

    2.정확히 1/3은 10 진수 (0.333333 ... ad infinitum)로 정확하게 표현할 수 없듯이 8.83을 이진수 부동 소수점으로 정확하게 표현할 수 없기 때문에 이것은 정상이며 (파이썬과 관련이 없습니다.)

    정확히 1/3은 10 진수 (0.333333 ... ad infinitum)로 정확하게 표현할 수 없듯이 8.83을 이진수 부동 소수점으로 정확하게 표현할 수 없기 때문에 이것은 정상이며 (파이썬과 관련이 없습니다.)

    절대 정밀도를 보장하려면 십진수 모듈이 필요합니다.

    >>> import decimal
    >>> a = decimal.Decimal("8.833333333339")
    >>> print(round(a,2))
    8.83
    
  3. ==============================

    3.소수 모듈을 사용하려고하지만 반올림 모드도 지정해야합니다. 다음은 그 예입니다.

    소수 모듈을 사용하려고하지만 반올림 모드도 지정해야합니다. 다음은 그 예입니다.

    >>> import decimal
    >>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_UP)
    Decimal('8.34')
    >>> decimal.Decimal('8.333333').quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
    Decimal('8.33')
    >>> 
    
  4. ==============================

    4.훨씬 간단한 방법은 단순히 round () 함수를 사용하는 것입니다. 다음은 그 예입니다.

    훨씬 간단한 방법은 단순히 round () 함수를 사용하는 것입니다. 다음은 그 예입니다.

    total_price = float()
    price_1 = 2.99
    price_2 = 0.99
    total_price = price_1 + price_2
    

    지금 total_price를 출력한다면

    3.9800000000000004
    

    그러나 당신이 round () 함수로 묶는다면

    print(round(total_price,2))
    

    출력은

    3.98
    

    round () 함수는 두 개의 매개 변수를 받아들임으로써 작동합니다. 첫 번째 번호는 반올림하려는 번호입니다. 두 번째는 반올림 할 소수 자릿수입니다.

  5. ==============================

    5.2 자리 소수점에 8.8333333333339를 반올림하면 정답은 8.84가 아니라 8.84입니다. 8.83000000001을 얻은 이유는 8.83이 바이너리로 올바르게 반올림 될 수없는 숫자이고 가장 가까운 것을 제공하기 때문입니다. 모든 0없이 인쇄하려면 VGE에 다음과 같이하십시오.

    2 자리 소수점에 8.8333333333339를 반올림하면 정답은 8.84가 아니라 8.84입니다. 8.83000000001을 얻은 이유는 8.83이 바이너리로 올바르게 반올림 될 수없는 숫자이고 가장 가까운 것을 제공하기 때문입니다. 모든 0없이 인쇄하려면 VGE에 다음과 같이하십시오.

    print "%.2f" % 8.833333333339   #(Replace number with the variable?)
    
  6. ==============================

    6.반올림하려는 경우 8.84가 잘못된 답입니다. 8.833333333333은 8.83, 8.84가 아니라 8.83입니다. 언제든지 반올림하고 싶다면 math.ceil을 사용할 수 있습니다. float 숫자 자체를 반올림하는 것이 의미가 없으므로 문자열 서식 지정과 함께 사용하십시오.

    반올림하려는 경우 8.84가 잘못된 답입니다. 8.833333333333은 8.83, 8.84가 아니라 8.83입니다. 언제든지 반올림하고 싶다면 math.ceil을 사용할 수 있습니다. float 숫자 자체를 반올림하는 것이 의미가 없으므로 문자열 서식 지정과 함께 사용하십시오.

    "%.2f" % (math.ceil(x * 100) / 100)
    
  7. ==============================

    7.기록만을 위해서. 당신은 이렇게 할 수 있습니다 :

    기록만을 위해서. 당신은 이렇게 할 수 있습니다 :

    def roundno(no):
        return int(no//1 + ((no%1)/0.5)//1)
    

    거기, 포함 / 수입에 대한 필요가 없습니다.

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

    8.가장 쉬운 방법은 inbuilt 함수 인 below를 사용하는 것입니다.

    가장 쉬운 방법은 inbuilt 함수 인 below를 사용하는 것입니다.

    format()
    

    예 :

    format(1.242563,".2f")
    

    출력은 다음과 같습니다.

    1.24
    

    비슷하게:

    format(9.165654,".1f")
    

    줄 것입니다 :

    9.2
    
  9. ==============================

    9.십진수 모듈을 사용하십시오 : http://docs.python.org/library/decimal.html

    십진수 모듈을 사용하십시오 : http://docs.python.org/library/decimal.html

  10. ==============================

    10.Hier는 라운드 업 / 다운 문제에 대한 해결책입니다.

    Hier는 라운드 업 / 다운 문제에 대한 해결책입니다.

    <.5 반올림

    import math
    
    def _should_round_down(val: float):
        if val < 0:
            return ((val * -1) % 1) < 0.5
        return (val % 1) < 0.5
    
    def _round(val: float, ndigits=0):
        if ndigits > 0:
            val *= 10 ** (ndigits - 1)
    
        is_positive = val > 0
        tmp_val = val
        if not is_positive:
            tmp_val *= -1
    
        rounded_value = math.floor(tmp_val) if _should_round_down(val) else    math.ceil(tmp_val)
        if not is_positive:
            rounded_value *= -1
    
        if ndigits > 0:
            rounded_value /= 10 ** (ndigits - 1)
    
        return rounded_value
    
    # test
    # nr = 12.2548
    # for digit in range(0, 4):
    #     print("{} decimals : {} -> {}".format(digit, nr, _round(nr, digit)))
    
    # output
    # 0 decimals : 12.2548 -> 12
    # 1 decimals : 12.2548 -> 12.0
    # 2 decimals : 12.2548 -> 12.3
    # 3 decimals : 12.2548 -> 12.25
    
  11. ==============================

    11.다음은이 작업을 수행하는 간단한 함수입니다 ::

    다음은이 작업을 수행하는 간단한 함수입니다 ::

    def precision(num,x):
        return "{0:.xf}".format(round(num))
    

    여기서,  num은 십진수입니다.  x는 부동 소수점을 반올림하려는 소수점 자리까지입니다.

    다른 구현보다 장점은 십진수의 오른쪽 끝에 0을 채워 십진수를 소수점 이하 자릿수로 만들 수 있다는 것입니다.

    예제 1 :

    precision(10.2,9)
    

    돌아올거야. 10.200000000 (최대 9 dp)

    예 2 :

    precision(10.2231,2)
    

    돌아올거야. 10.22 (최대 2 dp)

  12. ==============================

    12.나는이 코드를 가지고 :

    나는이 코드를 가지고 :

    tax = (tax / 100) * price
    

    그리고이 코드 :

    tax = round((tax / 100) * price, 2)
    

    나를 위해 일한 라운드

  13. from https://stackoverflow.com/questions/4518641/how-to-round-a-floating-point-number-up-to-certain-decimal-place by cc-by-sa and MIT license