2015-01-17 4 views
-2

"21.7"및 "21,7"과 같은 문자열을 단일 문자로 변환하고 싶습니다.쉼표 또는 도트 문자열을 단일 문자로 변환

내가

Dim s As String = "21.7" 
    'or Dim s As String = "21,7" 
    Dim sng As Single = Single.Parse(s) 

를 사용하고 나는 그것을 받아 모두 ","와 것이라고 생각 "." 그러나 소수점 구분 기호로 사용하기 때문에 (Windows의 소수점 구분 기호 설정에 따라) 217을 얻게됩니다.

내가 필요한 것을 수행하는 기본 제공 함수가 있습니까?

+0

는 "21,7은"에서 어쩌면 다른 문화에서 온 않는 InvariantCulture으로 시도하는 것입니다 디시리얼라이저? – Plutonix

답변

1

로케일은 역으로 사실입니다.

문제에 대한 가능한 솔루션은 CurrentCulture를 사용하여 먼저 변환을 시도하고 실패하면 다음,

Dim s = "21.7" 
Dim sng 
if Not Single.TryParse(s, NumberStyles.AllowDecimalPoint, 
         CultureInfo.CurrentCulture, sng) Then 
    if Not Single.TryParse(s, NumberStyles.AllowDecimalPoint, 
          CultureInfo.InvariantCulture, sng) Then 
     Console.WriteLine("Error conversion") 
     return 
    End If 
End If 
Console.WriteLine(sng) 
0

당신은 정말에만 예를 들어, 한 번에 하나의 문화를 사용할 수 있습니다

당신이 발견 한 것처럼, 하나의 포인트는 다른위한 동안 쉼표를 사용하는 일부 로켈 소수 구분 기호로 간주되지 않습니다
Dim englishUS = "21.7" 
Dim englishGB = "21,7" 
Const EnUSCultureName = "en-US" 
Const EnGBCulterName = "en-GB" 
Dim us As Single = Single.Parse(englishUS, New Globalization.CultureInfo(EnUSCultureName)) 
Dim gb As Single = Single.Parse(englishUS, New Globalization.CultureInfo(EnGBCulterName)) 
관련 문제