C#에서는 반올림없이 이중의 마지막 두 소수 자릿수를 가져 오려고합니다. 나는 Math.Floor
에서 Math.Truncate
까지 모든 것을 시도했지만 아무런 효과가 없다. 결과반올림하지 않고 마지막 2 소수점 자리 가져 오기
샘플 내가 좋아하는 것 :
1,424.2488298 -> 1,424.24
53.5821 -> 53.58
10,209.2991 -> 10,209.29
어떤 아이디어?
C#에서는 반올림없이 이중의 마지막 두 소수 자릿수를 가져 오려고합니다. 나는 Math.Floor
에서 Math.Truncate
까지 모든 것을 시도했지만 아무런 효과가 없다. 결과반올림하지 않고 마지막 2 소수점 자리 가져 오기
샘플 내가 좋아하는 것 :
1,424.2488298 -> 1,424.24
53.5821 -> 53.58
10,209.2991 -> 10,209.29
어떤 아이디어?
음, 수학적으로는 간단합니다
var f = 1.1234;
f = Math.Truncate(f * 100)/100; // f == 1.12
이동, 잘라 왼쪽 두 곳으로 다시 이동하는 int로 캐스트 오른쪽에 소수점 두 곳. 프레임 워크에서이 작업을 수행하는 방법이있을 수 있지만 지금은 볼 수 없습니다. 당신은 그것을 일반화 수 :
double Truncate(double value, int places)
{
// not sure if you care to handle negative numbers...
var f = Math.Pow(10, places);
return Math.Truncate(value * f)/f;
}
double d = Math.Truncate(d * 100)/100;
일반적인 솔루션 :
public static double SignificantTruncate(double num, int significantDigits)
{
double y = Math.Pow(10, significantDigits);
return Math.Truncate(num * y)/y;
}
그런 다음
double x = 5.3456;
x = SignificantTruncate(x,2);
원하는 결과 x=5.34
를 생성합니다.
내 조언 : 처음 사용시 double
을 사용 중지합니다.. 소수점 이하 반올림이 필요한 경우 확률은 decimal
이어야합니다. 귀하의 신청서는 무엇입니까?
당신이 이중이있는 경우, 당신은 이런 식으로 작업을 수행 할 수 있습니다 이중의 절대 값이 792281625142643375935439504보다 큰 경우 (100)에 의해 곱셈이 실패하기 때문에이 기술이 실패합니다
double r = whatever;
decimal d = (decimal)r;
decimal truncated = decimal.Truncate(d * 100m)/100m;
하는 것으로 . 큰 값을 처리해야하는 경우 특수 기술을 사용해야합니다. (물론, 시간에 의해 이중 대형, 당신은 어쨌든 소수점 이하 두 자리 값을 표현하는 능력을 넘어도있다한다.)
Math.Round(NumberToRound - (double)0.005,2)
즉
Math.Round(53.5821 - (double)0.005,2) // 53.58
Math.Round(53.5899 - (double)0.005,2) // 53.58
Math.Round(53.5800 - (double)0.005,2) // 53.58
당신이 경우 * decimal *에서 작업을하고 * decimal *을 사용할 수있을 때 * double *을 사용하는 이유는 무엇입니까? –
이 게시물로 이동하여 적합한 정보를 찾을 수 있습니다. http://how-to-code-net.blogspot.ro/2012/09/how-to-format-number-to-x-decimal.html –