문제

누구든지 내가 어떻게 사용할 형식 문자열을 얻을 수 있는지 아는 사람이 있습니까? 은행가 반올림? 나는 "{0 : c}"를 사용하고 있지만 은행가 반올림과 같은 방식으로 반올림하지는 않습니다. 그만큼 Math.Round() 방법은 은행가 반올림이됩니다. 형식 문자열을 사용하여 반올림하는 방법을 복제 할 수 있어야합니다.


메모: 원래의 질문은 오히려 오해의 소지가 있었고, Regex를 언급 한 답변은 그로부터 파생됩니다.

도움이 되었습니까?

해결책

문자열 입력에서 Math.Round ()를 호출하여 원하는 동작을 얻을 수 없습니까?

대신에:

string s = string.Format("{0:c}", 12345.6789);

하다:

string s = string.Format("{0:c}", Math.Round(12345.6789));

다른 팁

Regexp는 패턴 매칭 언어입니다. Regexp에서 산술 작업을 수행 할 수 없습니다.

iformatprovider 및 iCustomformatter에 대한 경험을하십시오. 다음은 링크가 올바른 방향을 가리킬 수 있습니다. http://codebetter.com/blogs/david.hayden/archive/2006/03/12/140732.aspx

불가능하고 정규 표현에는 "숫자"라는 개념이 없습니다. 당신은 a를 사용할 수 있습니다 일치 평가자 그러나 당신은 명령적인 c# 코드를 추가하고, 당신의 REGEX 전용 요구 사항에서 벗어날 것입니다.

.NET은 산술 및 은행가의 반올림을 지원했습니다.

//midpoint always goes 'up': 2.5 -> 3
Math.Round( input, MidpointRounding.AwayFromZero );

//midpoint always goes to nearest even: 2.5 -> 2, 5.5 -> 6
//aka bankers' rounding
Math.Round( input, MidpointRounding.ToEven );

"제로에서 멀리 떨어진 곳"이지만 학교에서 배운 것인데 "라운드"조차도 반올림이 실제로 기본값입니다.

이는 후드 컴퓨터 프로세서에서 은행가의 반올림을 수행하기 때문입니다.

//defaults to banker's
Math.Round( input );

반올림 형식 문자열이 은행가의 반올림에 기본값을 할 것이라고 생각했을 것입니다. 그렇지 않습니까?

.NET 3.5를 사용하는 경우 확장 방법을 정의하여이 작업을 수행 할 수 있습니다.

public static class DoubleExtensions
{
    public static string Format(this double d)
    {
        return String.Format("{0:c}", Math.Round(d));
    }
}

그런 다음 전화하면 다음을 수행 할 수 있습니다.

12345.6789.Format();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top