이 코드 (화씨에서 섭씨로 변환)의 출력에서 많은 소수점을 얻습니다.
내 코드는 현재 다음과 같습니다
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))
어디:
답변
대부분의 답변은 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
때 예상대로 함수를 작동 시키는 편리한 래퍼 입니다.import
Decimal
>>> 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