Game Development, 게임개발/개발

Convert 그리고 Parse의 문화권 문제 [C#]

게임이 더 좋아 2022. 5. 22. 00:31
반응형
728x170

JSON 파일로 데이터를 받아오는 경우도 있지만

문자열로 데이터를 받아오는 경우도 있는데

최근에 문제가 생겼었다.

 

바로 C#에서의 parse 문제다.

Convert도 마찬가지다.

 

그 중에서 float이나 double 같이 소수점이 있는 아이들이 문제가 많다.

https://docs.microsoft.com/en-us/dotnet/api/system.single.parse?view=net-6.0 

https://docs.microsoft.com/ko-kr/dotnet/api/system.convert?view=net-6.0#methods 

 

본론으로 들어가보자

 


 

1. 문제

 

숫자에서 0.005를 float.parse 했을 때, 0이 되어버리는 현상

기존 서비스하던 국가가 아닌 다른 국가에서 나타나는 현상

 

 

2. 원인

 

다른 나라 정상 작동 => 기존의 로직은 틀리지 않음 => 데이터를 뽑아오는 부분에 문제가 있다고 생각.

실제로 문자열은 같았으나 Parse 했을 때 값이 달라짐.

 

 

3.해결

 

C#의 특징 중 하나인 문화권에 대한 설정이 필요함.

=>아니면 문화권에 상관없이 통일하게끔 할 수도 있다.

float.Parse("0.006", CultureInfo.InvariantCulture);

우리나라와 미국은 같은 설정을 사용해서 오류가 일어나지 않았음

글로벌 서비스를 준비중인 게임이 C#을 사용한다면 그리고 문자열을 다른 타입으로 바꾸는 방법을 사용한다면

주의 깊게 살펴보아야 할 것이다.

 


 

** 추천

처음부터 json으로 받자.

728x90
반응형
그리드형