십진법 데이터 형식을 사용하여 SQL Server 데이터베이스에 재무 데이터를 저장하므로 십진수로 6-8 자리의 정밀도가 필요합니다. 이 값을 데이터 액세스 레이어를 통해 C# 서버로 다시 가져 오면 10 진수 데이터 유형으로 되돌아갑니다.C에서 십진수로 안전하게 변환하는 방법 #
내 통제 범위를 벗어나는 일부 설계 제약으로 인해이를 변환해야합니다. 문자열로 변환하는 것은 문제가되지 않습니다. 이중으로 변환하는 것은 MS 설명서에서 "[십진법에서 이중으로 변환]은 배정 밀도 부동 소수점 숫자가 십진수보다 소수이기 때문에 반올림 오류가 발생할 수 있습니다."
계산이 완료된 후 double (또는 문자열)을 소수점 이하 2 자리로 반올림 할 수 있으므로 소수점 이하 변환을 수행하여 "반올림하기 전에 어떤 정밀도도 잃지 않도록하십시오" ?
MSDN에 따르면 decimal은 28-29 자리의 정밀도를, double은 15-16을가집니다. 그러나 6-8 자리 만 저장하고 있다면 반올림이 영향을 미치지 않을 것이라고 생각합니다. 이것은 쉽게 단위 테스트를 통해 확인할 수 있습니다. – nithins