2011-03-30 5 views
2

엔터티 프레임 워크를 ORM으로, SQL Server 2008을 서버로 사용합니다.SQL Server의 돈

돈 열을 사용하기 위해 앱에서 재정 조작을했습니다. 그러나 결과가 예를 들면 2.99986 일 때 원하는 2.9999 동안 데이터베이스 값 2.9998에 저장됩니다.

Math.Round (2.99986)가 결과 2.9998을 줄 수 있도록 C#으로 숫자를 반올림하는 방법과 달리 수학이 말하는 것처럼 작동하도록하는 옵션이 있습니까? 이후에 나머지 sigits를 잘라냅니다. 4 위.

도움

에 대한

감사 그때 10000에 의해 내 번호를 곱을 절단 한 후 10000 : 다른 더 나은 솔루션으로 분할하는 것입니다 함께했다 유일한 해결책?

+0

에 절단합니다. 왜 당신은 * 덜 * 원하십니까? – FreeAsInBeer

+1

종종 * 정밀도 *를 원하지 않으므로 정확도 *를 원합니다. 전사적으로 동일한 방식으로 수행합니다. 그렇지 않으면 페니 라운딩 오류가 발생하여 회계사의 머리가 폭발하게됩니다. 다른 시스템이 소수점 이하 4 자리까지 유사한 숫자를 추적하는 경우 동일한 방법으로 간단하게 큰 두통을 피할 수 있습니다. – KeithS

+0

'hello '다음에 두 번째 및 세 번째 단락이 충돌합니다. 2nd는 2.9999가 원하는 것을 말한다. 셋째로 원하는 것은 2.9998입니다. 편집 (마지막 단락)은 2.9998입니다. – RichardTheKiwi

답변

2

사용이 효율적으로 재무 계산을 수행 할 때 보통이 가능한 정밀도를 원하는 요구되는 정밀

Math.Round(value - 0.00005, 4, MidpointRounding.AwayFromZero)); 
7

데이터 유형의 제한 사항입니다. 십진수 오른쪽의 네 번째 숫자 다음에 오는 부분을 잘라내는 것처럼 보입니다. MSDN에서

- Using Monetary Data : 객체가 돈으로 정의 된 경우

, 그것은 소수의 오른쪽에있을 수 4있는 19 자리 숫자, 최대를 포함 할 수 있습니다. 개체는 8 바이트를 사용하여 데이터를 저장합니다.

돈 smallmoney 네 개의 소수점 한정되어 돈의 데이터 타입은 따라서 (19)의 정밀도 (4)의 크기 및 제

의 길이를 갖는다. 더 많은 소수점이 필요한 경우 십진수 데이터 유형을 사용하십시오.


업데이트 : 귀하의 의견에서

당신이 C#으로이 문제를 해결하려는 것으로 보인다. 이 경우 Math.Round 오버로드 중 하나를 사용하여 필요한 반올림 논리를 제공하는 MidpointRounding 열거 형을 사용할 수 있습니다.

+0

더 많은 소수점이 필요하지 않습니다. 난 그냥 어떤 방법을 알고 싶어요 2.2.9898 반올림 후 C# 양식 번호 2.99986에 – gruber

+0

@ Downvoter - 관심 신경? – Oded