2014-01-20 2 views
0

두 금액을 곱한 결과가 특정 금액과 같거나 몇 센트를 받는지 확인할 수 있습니까? 예 : 5.57 * 2.92 = 16.2644 및 3.25 * 5 = 16.25. 총 금액에 가장 가까운 금액을 찾으려고 할 때마다 매번 0.01만큼 지분 인 첫 번째 금액을 늘리고 있습니다. 두 번째 금액은 변경되지 않습니다.두 금액의 합계가 일정한 허용 한도와 일치하는지 확인하십시오.

+2

그것은 매우 간단 보인다는 - 우리는 당신의 코드를 볼 수 있습니까? – jedwards

+0

그래서 관련된 총 지분을 계산하고 싶습니까? –

+0

@AamirAdnan 나는 진드기에 근거하여 말을 가격을 내린 후에 말의 가격이 떨어지면 5.0을 말하고 말은 4.8로 떨어 뜨리면 잠재적 이익을 계산하고있다. 책임을 흑자로 바꾸십시오. –

답변

3

파이썬 (또는 프로그래밍 언어)으로 재무 유형 계산을 수행하는 경우 이 아니며은 부동 소수점 숫자 (http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems)를 사용하려고하지 않습니다.

대신 적어도 decimal 모듈을 사용하면 임의 정밀도 십진수 (http://docs.python.org/2/library/decimal.html)를 사용할 수 있습니다. 실제 문제에 관해서는

:

from decimal import Decimal 

r1 = Decimal("5.57") * Decimal("2.92") 
r2 = Decimal("3.25") * Decimal("5") 
epsilon = Decimal("0.01") 

if abs(r1 - r2) <= epsilon: 
    print "Almost equal!" 
+0

적어도 부분적으로 0.01은 이진수로 표현할 수 없습니다. 즉, OP의 계산에 실수로 플로트를 사용하는 경우 오류가 누적되기 시작합니다. –

+0

좋은 지적. 수정되었습니다. –

+0

감사합니다. 그게 도움이됩니다. –

2

소수점이 좋다. 허용 오차 내에서 두 개의 수레를 비교하는 그러나

는 :

tolerance = 0.04 
if abs(number1 - number2) < tolerance: 
    print('the numbers are close') 
+0

감사합니다. Max Noel에서 제안한 10 진수 대신 부동 소수점을 사용하면 어떤 이점이 있습니까? –

+0

가장 빠른 비트는 더 빠르고 쓰기 쉽지만, 정확성 문제로 인해 여기에있는 일반적인 권장 사항은 '십진수'입니다. – jayelm

관련 문제