"높은"정밀도 Double을 Decimal로 변환 할 때 Convert.ToDecimal로 정밀도가 떨어지거나 반올림으로 (10 진수)로 캐스팅됩니다.십진수에서 두 자리로 반올림하지 않고 15 자리에서 반올림
예(더블) Convert.ToDecimal 의해 반환
double d = -0.99999999999999956d;
decimal result = Convert.ToDecimal(d); // Result = -1
decimal result = (Decimal)(d); // Result = -1
진수 값은 15 개 개의 유효 숫자의 최대를 포함한다. value 매개 변수에 15 자리 이상의 유효 자릿수가 포함 된 경우 가장 가까운 값으로 반올림하여 반올림됩니다.
그래서 난 내 정밀도를 유지하기 위해, 나는 Convert.ToDecimal (String)를 문자열로 내 이중 변환 한 후 호출 할 필요가 :이 방법은 작업 있지만
decimal result = System.Convert.ToDecimal(d.ToString("G20")); // Result = -0.99999999999999956d
내가 사용하지 않도록하고 싶습니다 15 자리수 후에 반올림하지 않고 Double을 Decimal로 변환하기위한 String 변수?
'd'의 범위를 미리 알고 있습니까? 난 의사 코드에서 가벼운 솔루션을 제공 할 수 있습니다. (C#으로 쓰려면 익숙하지 않습니다.)'d'가 [-2..2]와 같은 범위에 있다는 것을 알고 있다면 –
d는 항상 [- 1,1] –
나는 이걸 다른 곳에서 온 'double'이라고 생각하고있어. 너는 바꿀 수 없어? get-go에서 십진수로 선언 된 경우 ('decimal d = -.99.999999999999956m;') 해당 정밀도가 유지됩니다. –