2012-11-19 4 views
6

문제는 내 결과를 소수 둘째 자리로 반올림하는 것입니다. 당신이 통화와 마찬가지로 내 애플 그러나, 나는 가장 가까운 소수의 응용 프로그램 라운드를 만들기 어려움을 겪고, 올바른 결과를 얻을 수파이썬에서 소수 2 자리로 반올림

12 개월 가격은 $ 23 6 주가가 13.799999999999999입니다 예를 들어 너무
cost = input("\nEnter the 12 month cost of the Order: ") 
cost = float(cost) 

print("\n12 Month Cost:", 
    cost * 1,"USD") 
print("6 Month Cost:", 
    cost * 0.60,"USD") 
print("3 Month Cost:", 
    cost * 0.36,"USD") 

하지만 나는 그것을 보여주고 싶어 13.80

나는 구글을 둘러 보았고 숫자를 돌리는 법을 보았지만 결과를 반올림하는데 많은 도움을 얻을 수 없었다.

+0

12 개월, 6 개월 및 3 개월 비용에 대한 승수에 대한 요점은 ... 1, 0.6 및 0.36 대신 1, 0.5 및 0.25이어야한다고 생각합니다. 12 개월 (6 개월)의 50 %와 12 개월 (3 개월)의 25 %를 복용하고 있습니다. – dhj

+0

@dhj OP가 구독 기간에 따라 가장 좋은 할인을 제공하는 구독 시스템을 작성하고있을 가능성이 있습니다. $ 13.80에 6 개월 동안 구독하십시오. 그러나 12 개월 구독하는 것은 연중 비용보다 $ 4.60 저렴합니다! – kreativitea

+0

@kreativitea ... 우수 포인트! 나는 수학/과학 데이터 처리를 많이합니다. 내 부분에 난처한 가정. – dhj

답변

10

당신은 형식 지정자를 사용해야합니다 반올림 방법을 제어 :

from decimal import Decimal, ROUND_HALF_UP 
def round_decimal(x): 
    return x.quantize(Decimal(".01"), rounding=ROUND_HALF_UP) 

cost = Decimal(input("Enter 12 month cost: ")) 
print("6 Month Cost: ", round_decimal(cost * Decimal(".6"))) 
+0

통화 형식을 넘어서는 경우, 일반적으로 파이썬 10 진수 형식 지정자를 사용하면 [decimal'] (http://docs.python.org/2/library/) 형식보다 더 나은 성능을 얻지 못합니다. decimal.html) 모듈? – jvriesem

2

일반적인 방법은 100을 곱한 다음 0.5 (반올림 함)와 int()를 더하는 것입니다. 이제 반올림 한 센트의 수를 얻었으니 반올림 된 플로트를 다시 얻기 위해 100으로 나눕니다.

print("6 Month Cost: %.2fUSD" % (cost * .6)) 

더 나은, 당신은 전혀 부동 소수점 숫자에 의존해서는 안 대신 decimal 모듈을 사용하면 임의 정밀도 등을 제공합니다

cost = 5.5566 
cost *= 100 # cost = 555.66 
cost += 0.5 # cost = 556.16 
cost = int(cost) # cost = 556 
cost /= float(100) # cost = 5.56 

cost = 5.4444 
cost = int((cost * 100) + 0.5)/float(100) # cost = 5.44 
1

당신은 단지 그것을 인쇄 할 경우, 문자열 형식이 작동합니다

print("\n12 Month Cost:%.2f USD"%(cost*1)) 
2

그냥 문자열로 그것을 갖고 싶어 는, 형식은 도움이 될 수 있습니다

format(cost, '.2f') 

이 기능은 두 번째 매개 변수에 정의 된 형식의 된 문자열을 반환합니다. 따라서 비용에 3.1418이 있으면 위 코드는 '3.14'문자열을 반환합니다.

관련 문제