我想將諸如「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.
是否有內置函數可以滿足我需要?
我想將諸如「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.
是否有內置函數可以滿足我需要?
正如你已經發現,單點不被視爲小數點分隔符的某些區域設置使用逗號而對於其他區域設置是相反的。
你的問題的一個可能的解決方案是首先嚐試轉換使用的CurrentCulture,然後,如果失敗,嘗試用InvariantCulture的
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)
你真的可以只用一種文化的時間,例如:
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))
不「21,7」從來自一些其他的文化,也許一個反序列化器? – Plutonix