[python] 파이썬으로 소수점 이하 2 자리를 반올림하는 방법?

이 코드 (화씨에서 섭씨로 변환)의 출력에서 ​​많은 소수점을 얻습니다.

내 코드는 현재 다음과 같습니다

def main():
    printC(formeln(typeHere()))

def typeHere():
    global Fahrenheit
    try:
        Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
    except ValueError:
        print "\nYour insertion was not a digit!"
        print "We've put your Fahrenheit value to 50!"
        Fahrenheit = 50
    return Fahrenheit

def formeln(c):
    Celsius = (Fahrenheit - 32.00) * 5.00/9.00
    return Celsius

def printC(answer):
    answer = str(answer)
    print "\nYour Celsius value is " + answer + " C.\n"



main()

그래서 제 질문은 소수점 둘째 자리에 대한 모든 답을 어떻게 프로그램에 적용합니까?



답변

당신이 사용할 수있는 round첫 번째 인수로 숫자를 받아 두 번째 인수는 소수점 이후의 정밀도 기능을.

귀하의 경우 다음과 같습니다.

answer = str(round(answer, 2))


답변

str.format()구문 을 사용하여 소수점 이하 두 자리 로 표시 answer 합니다 (의 기본 값을 변경하지 않고 answer).

def printC(answer):
    print("\nYour Celsius value is {:0.2f}ºC.\n".format(answer))

어디:

  • :형식 사양을 소개합니다
  • 0 숫자 유형에 대해 기호 인식 제로 패딩을 활성화합니다.
  • .2세트 정밀도 로를2
  • f 숫자를 고정 소수점 숫자로 표시합니다

답변

대부분의 답변은 round또는 format입니다. round때로는 반올림되며 내 경우에는 변수 을 반올림하고 표시하지 않아야했습니다.

round(2.357, 2)  # -> 2.36

여기에서 답을 찾았습니다 : 부동 소수점 숫자를 특정 소수점 이하 자릿수로 반올림하는 방법은 무엇입니까?

import math
v = 2.357
print(math.ceil(v*100)/100)  # -> 2.36
print(math.floor(v*100)/100)  # -> 2.35

또는:

from math import floor, ceil

def roundDown(n, d=8):
    d = int('1' + ('0' * d))
    return floor(n * d) / d

def roundUp(n, d=8):
    d = int('1' + ('0' * d))
    return ceil(n * d) / d


답변

float(str(round(answer, 2)))
float(str(round(0.0556781255, 2)))


답변

답을 반올림하고 싶습니다.

round(value,significantDigit)이 작업을 수행하는 일반적인 솔루션이지만 반올림하는 숫자가 즉시 열등한 (왼쪽) 숫자가있는 경우 수학 관점에서 예상대로 작동하지 않는 경우 가 있습니다.5 .

이 예측할 수없는 동작의 예는 다음과 같습니다.

>>> round(1.0005,3)
1.0
>>> round(2.0005,3)
2.001
>>> round(3.0005,3)
3.001
>>> round(4.0005,3)
4.0
>>> round(1.005,2)
1.0
>>> round(5.005,2)
5.0
>>> round(6.005,2)
6.0
>>> round(7.005,2)
7.0
>>> round(3.005,2)
3.0
>>> round(8.005,2)
8.01

과학의 통계에 대한 전통적인 반올림을 수행하려는 의도가 있다고 가정하면, 이는 과 같은 추가 항목이 필요할 round때 예상대로 함수를 작동 시키는 편리한 래퍼 입니다.importDecimal

>>> round(0.075,2)

0.07

>>> round(0.075+10**(-2*6),2)

0.08

아하! 이를 바탕으로 함수를 만들 수 있습니다 …

def roundTraditional(val,digits):
   return round(val+10**(-len(str(val))-1), digits)

기본적으로 이것은 문자열에 실제로 작은 값을 추가하여 round예상대로 함수 와 관련이없는 예기치 않은 인스턴스에서 올바르게 반올림 하도록합니다. 추가하는 편리한 가치는1e-X 어디에 X당신이 사용하려는 번호 문자열의 길이 round를 더한에 1.

사용하는 접근 방식은 10**(-len(val)-1)시프트를 강제하기 위해 추가 할 수있는 가장 작은 숫자이므로 의도적으로 추가 .되었습니다. 또한 소수점 이하 자릿수 가 없어도 추가 한 값이 반올림을 변경하지 않도록합니다 . 나는 단지 10**(-len(val))조건부와 함께 사용할 수 있습니다if (val>1)1더 많이 빼기 있지만 1이 해결 방법으로 올바르게 처리 할 수있는 적용 가능한 10 진수 범위를 많이 변경하지 않으므로 항상 빼기하는 것이 더 간단합니다 . 이 방법은 값이 유형의 한계에 도달하면 실패하지만 실패하지만 거의 모든 유효 10 진수 값 범위에서 작동합니다.

완성 된 코드는 다음과 같습니다.

def main():
    printC(formeln(typeHere()))

def roundTraditional(val,digits):
    return round(val+10**(-len(str(val))-1))

def typeHere():
    global Fahrenheit
    try:
        Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
    except ValueError:
        print "\nYour insertion was not a digit!"
        print "We've put your Fahrenheit value to 50!"
        Fahrenheit = 50
    return Fahrenheit

def formeln(c):
    Celsius = (Fahrenheit - 32.00) * 5.00/9.00
    return Celsius

def printC(answer):
    answer = str(roundTraditional(answer,2))
    print "\nYour Celsius value is " + answer + " C.\n"

main()

… 당신이 기대하는 결과를 줄 것입니다.

십진 라이브러리를 사용 하여이 작업을 수행 할 수도 있지만 제안하는 래퍼가 더 간단하고 경우에 따라 선호 될 수 있습니다.


편집 : 감사 Blckknght을 것을 지적 5프린지 경우 특정 값을 발생 여기 .


답변

% .2f 형식을 사용하면 소수점 이하 2 자리로 내림 할 수 있습니다.

def printC(answer):
    print "\nYour Celsius value is %.2f C.\n" % answer


답변

파이썬 “%”의 문자열 포맷팅 연산자를 사용할 수 있습니다. “% .2f”는 소수점 뒤 2 자리를 의미합니다.

def typeHere():
    try:
        Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
    except ValueError:
        print "\nYour insertion was not a digit!"
        print "We've put your Fahrenheit value to 50!"
        Fahrenheit = 50
    return Fahrenheit

def formeln(Fahrenheit):
    Celsius = (Fahrenheit - 32.0) * 5.0/9.0
    return Celsius

def printC(answer):
    print "\nYour Celsius value is %.2f C.\n" % answer

def main():
    printC(formeln(typeHere()))

main()

http://docs.python.org/2/library/stdtypes.html#string-formatting