2013-06-12 5 views
0

가격이 부동/복식 일 때 가격에 대한 주문 도서를 정렬하는 좋은 방법은 무엇입니까? 이진 트리는 물가를 비켜주고 O (log (n))를 더할 수 있기 때문에 물가가 정수일 때 OK입니다. 수레/복식을 사용하는 것은 위험한 생각이나 나쁜 생각입니다.가격이 부유하는 경우 주문서 정렬

+2

가능한 경우 int를 사용하는 것이 좋습니다. * 센트 * (또는 귀하의 통화가 무엇이든간에) 가격 비교를 수행하십시오. 즉, 가격을 정수로 사용하라는 첫 번째 제안은 당신이 그것을 소집 할 수 있다면 선호 될 것입니다. 금전적 인 비교가되는 부동 소수점은 석유와 물과 같습니다. – WhozCraig

답변

4

우선 가격을 정수로 저장하는 것이 좋습니다. 단위가 cents, pence, 또는 그 밖의 작은 단위가 기본 통화의 1/1000 또는 1/10000th 단위 여야합니다. 나중에 많은 두통을 줄일 수 있습니다.

그러나 if (x.price == y.price)을 만들지 않는 한 price을 키로 사용하는 것이 좋습니다. 정렬을 위해 이진 트리는 less than (또는 greater than) 비교 만 필요로하므로 부동 소수점 값에 완벽하게 안전해야합니다. 값은 항상 다른 값보다 작거나 크다. 계산을하고 정확하게 값이 부동 소수점에 문제가 있는지를 확인하려고 할 때만입니다. [계산식에서 2.46을 곱한 다음 정확한 계산 결과를 얻은 다음 2.46으로 나눈 다음 원래 숫자를 빼고 정확히 0을 예상하는 경우]

+1

데이터에 NaN이없는 경우. –

+0

흠, 예. 그것은 꽤 나쁠 것입니다 - 대부분의 가격은 플로트의 범위 내에 있기를 바랍니다 - 대부분의 국가의 함정조차도 드문 것 같아요 ...;) –