문제

CSharp에서 float를 구문 분석하는 가장 좋은 방법은 무엇입니까?TryParse에 대해서는 알고 있지만 특히 궁금한 점은 점, 쉼표 등입니다.

내 웹사이트에 문제가 있습니다.내 개발자 서버에서 ',', ',', ''입니다. 분리기 용.그러나 prod 서버에서는 그 반대입니다.어떻게 하면 이것을 가장 잘 포착할 수 있습니까?

도움이 되었습니까?

해결책

입력의 출처에 따라 다릅니다.

입력이 사용자로부터 제공되면 사용자/페이지가 사용중인 CultureNfo를 사용해야합니다 (Thread.currentthread.currentuiculture).

당신은 httprequest.userlanguages 재산. (올바른 100%는 아니지만 아주 좋은 첫 번째 추측을 알았습니다.) 그 정보로, 당신은 다음을 설정할 수 있습니다. Thread.currentthread.currentuiculture 페이지 시작시.

입력이 내부 소스에서 나오면 불변의 배양 문자열을 구문 분석합니다.

입력이 제어 된 소스에서 나온 경우 구문 분석 방법을 사용하기가 다소 쉽습니다. 즉, 당신은 이미 문자열을 검증했습니다. 구문 분석은 실패하면 (느린) 예외를 던진다.

입력이 제어되지 않은 경우 (사용자 또는 기타 인터넷 소스) tryparse 나에게 더 좋아 보인다.

다른 팁

나는 Leppie의 답변에 동의합니다. 코드 측면에서이를 넣으려면 :

string s = "123,456.789";
float f = float.Parse(s, CultureInfo.InvariantCulture);

항상 과부하를 사용할 수 있습니다 구문 분석 여기에는 사용할 문화가 포함되어 있습니까?

예를 들어:

double number = Double.Parse("42,22", new CultureInfo("nl-NL").NumberFormat); // dutch number formatting

모든 데이터를 제어 할 수있는 경우 모든 코드에서 "CultureInfo.invariantculture"를 사용해야합니다.

내부 목적을 위해 지속적인 값 (숫자, 날짜, 시간 등)을 원한다면. 값을 형성하고 구문 분석하기 위해 "불변의 중독"을 사용합니다. "Invariantculture"는 모든 컴퓨터에서 동일하며 모든 OS는 사용자의 문화/언어 등이 있습니다 ...

string strFloat = (15.789f).ToString(System.Globalization.CultureInfo.InvariantInfo);
float numFloat  = float.Parse(System.Globalization.CultureInfo.InvariantInfo, strFloat);
string strNow   = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantInfo);
DateTime now    = DateTime.Parse(System.Globalization.CultureInfo.InvariantInfo, strNow);

시도/구문 분석 할 때 중립 문화 (또는 아는 사람)를 사용하십시오.

a 문화 또는 숫자 포르 아인포 그것은 당신이 플로트를 그대로 구문 분석하고자하는 문화를 나타냅니다. 이것은 소수, 그룹 분리기 등에 사용되는 문자를 제어합니다.

예를 들어 '.' 캐릭터는 CultureInfo.invariantculture에서 전달할 수있는 10 진수 지표로 취급되었습니다 (이것은 환경 문화와 동일한 상황을 원하는 서버 응용 프로그램에서 일반적으로 매우 유용합니다).

float.parse를 피하려고 시도하고 TryParse를 사용하여 훨씬 더 잘 수행하지만 동일한 작업을 수행하십시오. 이것은 Double, DateTime 등에도 적용됩니다 ...

(일부 유형은 또한 더 나은 성능을 발휘하는 tryparseexact도 제공합니다!)

소스는 웹 사이트의 입력입니다. 나는 그것이 유효하다고 의존 할 수 없습니다. 그래서 나는 앞에서 언급했듯이 Tryparse와 함께 갔다. 그러나 나는 currentculture를 제공하는 방법을 알 수 없습니다.

또한 이것은 현재 실행중인 서버의 문화를 줄 것이지만, 월드 와이드 웹이기 때문에 사용자는 어디서나있을 수 있습니다 ...

간단한 설명으로 서버의 현재 Cuklture를 알 수 있습니다.

System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CurrentCulture;

CurrentUICulture 속성이 있지만 UICulture는 ResourceMeanager 형식 다국어 응용 프로그램에서 사용됩니다.숫자 형식을 지정하려면 CurrentCulture를 고려해야 합니다.

이것이 당신에게 도움이 되기를 바랍니다

웹 사용자의 문화를 모르기 때문에 약간의 추측을 할 수 있습니다. 분리기를 위해 사용하는 문화와 함께 시도하십시오. 소수점의 경우, 그리고 사용하는 문화와 함께 tryparse. 분리기 및 소수점의 경우. 둘 다 성공하지만 다른 답변을 얻으면 사용자에게 의도 한 것을 물어봐야합니다. 그렇지 않으면 두 개의 동등한 결과 또는 하나의 사용 가능한 결과 또는 사용 가능한 결과가없는 경우 정상적으로 진행할 수 있습니다.

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