[C#] C #에서 숫자를 소수점 이하 두 자리로 반올림하는 방법은 무엇입니까?

Math.Round함수를 사용 하여이 작업을 수행하고 싶습니다.



답변

몇 가지 예는 다음과 같습니다.

decimal a = 1.994444M;

Math.Round(a, 2); //returns 1.99

decimal b = 1.995555M;

Math.Round(b, 2); //returns 2.00

다음과 같은 과부하로 반올림 / 반올림 은행을보고 싶을 수도 있습니다.

Math.Round(a, 2, MidpointRounding.ToEven);

여기에 더 많은 정보가 있습니다 .


답변

이 시도:

twoDec = Math.Round(val, 2)


답변

개인적으로 나는 아무 것도 반올림하지 않습니다. 어쨌든 CS에서 반올림은 약간의 청어이기 때문에 가능한 한 단호하게 유지하십시오. 그러나 사용자의 데이터 형식을 지정하고 싶기 때문에 string.Format("{0:0.00}", number)이것이 좋은 접근 방법 이라는 것을 알았습니다 .


답변

끈을 원한다면

> (1.7289).ToString("#.##")
"1.73"

아니면 십진수

> Math.Round((Decimal)x, 2)
1.73m

하지만 기억해! 반올림은 분산되지 않습니다. round(x*y) != round(x) * round(y). 따라서 계산이 끝날 때까지 반올림하지 마십시오. 그렇지 않으면 정확도가 떨어집니다.


답변

Wikipedia에는 일반적으로 반올림에 대한 좋은 페이지 가 있습니다.

모든 .NET (관리되는) 언어는 모든 공용 언어 런타임 (CLR) 반올림 메커니즘을 사용할 수 있습니다. 예를 들어 Math.Round () (위에서 언급 한) 메서드를 사용하면 개발자가 반올림 유형 (반올림에서 11로 또는 0에서 멀어짐) 을 지정할 수 있습니다. Convert.ToInt32 () 메서드와 그 변형은 round-to-even을 사용 합니다. 천장 ()바닥 () 메소드는 관련이 있습니다.

맞춤 숫자 형식 으로 반올림 할 수도 있습니다.

참고 Decimal.Round ()가 Math.Round () 이외의 다른 방법을 사용한다;

다음은 은행가의 반올림 알고리즘에 대한 유용한 위치 입니다. 반올림에 대한 Raymond의 유머 게시물 중 하나를 참조하십시오 …


답변

// 소수점 이하 두 자리까지 변환

String.Format("{0:0.00}", 140.6767554);        // "140.67"
String.Format("{0:0.00}", 140.1);             // "140.10"
String.Format("{0:0.00}", 140);              // "140.00"

Double d = 140.6767554;
Double dc = Math.Round((Double)d, 2);       //  140.67

decimal d = 140.6767554M;
decimal dc = Math.Round(d, 2);             //  140.67

=========

// just two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

“0”과 “#”을 결합 할 수도 있습니다.

String.Format("{0:0.0#}", 123.4567)       // "123.46"
String.Format("{0:0.0#}", 123.4)          // "123.4"
String.Format("{0:0.0#}", 123.0)          // "123.0"


답변

나는 오래된 질문을 알고 있지만 Math roundString format round 의 다음 차이점에 유의하십시오 .

decimal d1 = (decimal)1.125;
Math.Round(d1, 2).Dump();   // returns 1.12
d1.ToString("#.##").Dump(); // returns "1.13"

decimal d2 = (decimal)1.1251;
Math.Round(d2, 2).Dump();   // returns 1.13
d2.ToString("#.##").Dump(); // returns "1.13"