2011-12-06 5 views
4

2 자리로 반올림하려면 double 값이 필요합니다. 어떤 것을 선호합니까?Math.Round vs String.Format

String.Format("{0:0.00}", 123.4567);  // "123.46" 
Math.Round(123.4567, 2)     // "123.46" 
+0

음이 필요로 동일하지, 당신은'Math.Round'을 선호하고 반올림 옵션을 사용하여, 또한이 [반올림 문자열 형식 (HTTP 확인할 수 있도록 : // 유래합니다. com/questions/2226081/왜 - 그물 - 사용 - 반올림 알고리즘 - 문자열 형식 - 일치하지 않는 - 위트) – V4Vendetta

+0

당신이 두 배로 통화를 저장하는 경우가 아니라면, 십진법을 사용하는 것이 좋습니다. http://msdn.microsoft.com/en-us/library/364x0z75%28v=vs.80%29.aspx – spender

+4

'Math.0 자릿수의 '(double, digits)'는 개념적으로 매우 부정합니다. 나는 결코 사용되어서는 안된다고 생각합니다. 'double'은 이진 부동 소수점 숫자이므로 잘 정의 된 십진수 개념이 없습니다. 숫자를 특정 소수 자릿수로 반올림해야하는 경우 'Double'이 아닌 'Decimal'을 사용하십시오. – CodesInChaos

답변

6

출력이 달라야하는 경우 다른 기능입니다. 첫 번째 출력을 사용하면 소수점이 표시됩니다. 변수가 double 유형 인 경우 필연적 인 .ToString() 오버 헤드를 피할 수 있습니다.

1

전자는 문자열을 출력하고 후자는 double을 출력합니다. 결과를 어떻게 사용합니까? 이것에 대한 답은 당신의 질문에 대한 답을 줄 것입니다.

4

당신이 그것을 수행 할 작업에 따라 달라집니다 : 두 번째는 숫자를 반올림하지만 정수 결과가 있다면, 당신은 (7 7.00 대 예) 그냥 정수를 얻을 것이다

참고.

String.Format 문자열을 반환하므로 Math.Round(double)은 double을 반환합니다.

0

이 값을 문자열로 반환하려면 String.Format이 더 좋으며이 값을 double로 반환하려면 Math.Round가 더 좋습니다. 그것의 전적으로 귀하의 요구 사항에 따라 달라집니다.

10

Math.Round(double,digits) 숫자가 0 이상인 것은 개념적으로 매우 부정합니다. 하지만 결코 사용해서는 안된다고 생각합니다. double은 이진 부동 소수점 숫자이므로 잘 정의 된 십진수 개념이 없습니다.

십진수 표시 목적으로 만 사용할 필요가있는 경우 string.Format 또는 ToString("0.00")을 사용하고 실제 숫자를 반올림해야하는 경우 decimal.Round을 사용하는 것이 좋습니다 (예 : 추가 계산에서 사용).

참고 : decimal.Round을 사용하면 MidpointRounding 모드를 지정할 수 있습니다. ToEven 반올림이 아니라 일반적으로 AwayFromZero 반올림을 원합니다. 0.005m 반올림 ToEven

0.00로 반올림됩니다 및 0.0150.02로 반올림됩니다. 그것은 대부분의 사람들이 기대하는 것이 아닙니다.

비교 :

  • 방식에 대해서도 : 3.8
  • 방식에 대해서도 3.75 라운드 : 3.8-3.85 라운드 (즉, 대부분의 사람들이 기대하는 것 아니다)
  • AwayFromZero : 3.8
  • 에 3.75 원
  • AwayFromZero : 3.9
-3.85 라운드

6,자세한 내용은 다음을 참조하십시오 https://msdn.microsoft.com/en-us/library/system.math.round.aspx

+0

... "대부분의 사람들"이 아니라면 어떻게해야합니까? –