1.01 ^ 365 = 37.78

[C#] 소수점 Parsing 할 때, (float.Parse, double.Parse) 언어에 따른 소수점 에러 본문

프로그래밍/C#

[C#] 소수점 Parsing 할 때, (float.Parse, double.Parse) 언어에 따른 소수점 에러

Youngchangoon 2021. 10. 19. 19:15

문제

float.Parse() 함수를 사용할 때 러시아, 스페인등 지역에서 파싱 에러가 난다.

FormatException: Input string was not in a correct format. at System.Number.ParseSingle (System.String value, System.Globalization.NumberStyles options, System.Globalization.NumberFormatInfo numfmt)

원인

C#에는 사용자의 문화권에 따라 , 나 . 를 사이에 사용한다. 만약 사용자의 언어 환경이 다른 숫자 표기법을 사용하는 국가라면 string에서 float나 double로 파싱할때 특정 언어 환경에서만 에러가 난다.

해결

CultureInfo.InvariantCulture 변수를 사용하면 문화권에 영향을 안받게 처리할 수 있다. Parsing할때 한번만 적용하거나 현재 작동하고 있는 쓰레드안에 있는 전체 메소드의 문화권에 적용할 수 있다.

// 메소드 하나에 적용할때
float.Parse("12312313", CultureInfo.InvariantCulture);

// 현재 쓰레드에 전체 적용할때
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

'프로그래밍 > C#' 카테고리의 다른 글

뒤끝 비동기 함수와 C# Promise 사용하기  (0) 2022.02.16