문제

다문화 프로그래밍의 재미있는 부분 중 하나는 숫자 형식입니다.

  • 미국인들은 10,000.50을 사용합니다.
  • 독일인은 10.000,50을 사용합니다.
  • 프랑스어 사용 10 000,50

나의 첫 번째 접근 방식은 문자열을 가져와서 구분 기호가 나타날 때까지 역으로 구문 분석하고 이를 소수 구분 기호로 사용하는 것입니다.여기에는 명백한 결함이 있습니다.10.000은 10으로 해석됩니다.

또 다른 접근법:문자열에 숫자가 아닌 문자 2개가 포함된 경우 마지막 문자를 소수 구분 기호로 사용하고 나머지 문자는 삭제합니다.하나만 있는 경우 두 번 이상 발생하는지 확인하고 발생하면 삭제합니다.한 번만 나타나는 경우 뒤에 3자리 숫자가 있는지 확인하세요.그렇다면 폐기하고, 그렇지 않으면 소수 구분 기호로 사용하십시오.

명백한 "최상의 솔루션"은 사용자의 문화나 브라우저를 감지하는 것이지만, 프랑스인이 en-US Windows/Browser를 사용하는 경우에는 작동하지 않습니다.

.net Framework에는 다음보다 나은 신화적인 흑마술 부동 소수점 파서가 포함되어 있습니까? Double.(Try)Parse() 숫자 형식을 자동 감지하려고 하시나요?

도움이 되었습니까?

해결책

이 경우 당신이 할 수 있는 최선은 그들의 의견을 받아들인 다음 그들이 의미한다고 생각하는 것을 보여주는 것입니다.동의하지 않는 경우 예상되는 형식을 보여주고 다시 입력하도록 하세요.

다른 팁

문제의 ASP.NET 측면은 모르지만 .NET에는 매우 강력한 클래스가 있습니다. 시스템.세계화.문화정보.다음 코드를 사용하여 double 값이 포함된 문자열을 구문 분석할 수 있습니다.

double d = double.Parse("100.20", CultureInfo.CurrentCulture);
//  -- OR --
double d = double.Parse("100.20", CultureInfo.CurrentUICulture);

ASP.NET이 어떻게든(예:HTTP 요청 헤더를 사용하여) 현재 사용자의 CultureInfo를 CultureInfo.CurrentCulture 또는 CultureInfo.CurrentUICulture에 전달하면 제대로 작동합니다.

모든 사람을 기쁘게 할 수는 없습니다.내가 10을 10,000으로 입력하고 누군가가 10,000을 10,000으로 입력하면 입력 문화에 대한 지식 없이는 이를 처리할 수 없습니다.어떻게든 문화를 감지합니다(브라우저, 시스템 설정 - 사용 사례는 무엇입니까?)ASP?내부 앱입니까 아니면 전 세계에 공개되어 있습니까?) 또는 예상되는 형식의 예를 제공하고 가능한 가장 관대 한 파서를 사용하십시오.아마 다음과 같을 겁니다:

double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture);

프랑스어와 영어의 12.345 차이는 1000배입니다.max < 1000*min인 예상 범위를 제공하면 쉽게 추측할 수 있습니다.

예를 들어 사람(유아 및 어린이 포함)의 키를 mm 단위로 계산합니다.

200-3000의 범위를 사용하면 1.800 또는 1,800의 입력은 1미터와 80센티미터로 명확하게 해석될 수 있는 반면, 912.300 또는 912,300의 입력은 91센티미터와 2.3밀리미터로 명확하게 해석될 수 있습니다.

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