2009-12-15 5 views
1

우리가 청구해야 할 시간을 계산할 때 asp.NET에서 이상한 문제가 있습니다.asp.net 이상한 계산 결과

아래의 예에는 인보이스 발행이 필요한 총 75,9 시간이 있습니다. 이 시간은 여러 데이터베이스 행 (TimeID)에 걸쳐 있습니다.

기본적으로, 나는 항상 "청구 할"시간당 카운트에서 "amount_invoiced"을 공제 :

TimeID:25433 - to invoice=75,9 - amount_invoiced=1 
TimeID:25774 - to invoice=74,9 - amount_invoiced=1 
TimeID:24688 - to invoice=73,9 - amount_invoiced=1,5 
TimeID:24646 - to invoice=72,4 - amount_invoiced=2 
TimeID:24890 - to invoice=70,4 - amount_invoiced=2 
TimeID:25773 - to invoice=68,4 - amount_invoiced=2,25 
TimeID:24455 - to invoice=66,15 - amount_invoiced=2,5 
TimeID:25431 - to invoice=63,65 - amount_invoiced=2,5 
TimeID:24552 - to invoice=61,15 - amount_invoiced=3 
TimeID:24644 - to invoice=58,15 - amount_invoiced=3 
TimeID:24727 - to invoice=55,15 - amount_invoiced=3 
TimeID:25000 - to invoice=52,15 - amount_invoiced=4 
TimeID:25195 - to invoice=48,15 - amount_invoiced=4,15 
TimeID:24510 - to invoice=44 - amount_invoiced=4,5 
TimeID:24419 - to invoice=39,5 - amount_invoiced=5 
TimeID:25126 - to invoice=34,5 - amount_invoiced=5,5 
TimeID:25064 - to invoice=29 - amount_invoiced=6,5 
TimeID:24420 - to invoice=22,5 - amount_invoiced=7 
TimeID:25251 - to invoice=15,5 - amount_invoiced=7,5 
TimeID:24897 - to invoice=8,00000000000001 - amount_invoiced=8 

모든 것이 어떻게 든 TimeID 24897. 15,5의 계산을 제외하고, 확인 작업 - 7,5 = 8,00000000000001

나는 왜 이런 일이 벌어 지는지에 대해 당혹 스럽다. 비슷한 문제가있는 사람이 있습니까?

답변

1

일반적인 이중 내부 저장 문제. 이 사이트에서 여러 번, 여러 번 답변을 받았습니다 (나는 한 번 이상 답변 해 봤지만 Skeet은 아마도 잃어 버렸을 것입니다). 예 : 정보

Comparing double values in C#

+0

덕분에, 이제 문제는 해결된다. –

1

값을 저장하는 데 잘못된 데이터 유형을 사용하는 것 같아서 ... 정확한 수학 결과를 얻으려면 decimal을 사용해야합니다.