将逗号或点字符串转换为单个

Convert comma or dot string to single

我想将诸如“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.

是否有满足我需要的内置函数?

您实际上一次只能使用一种文化,例如:

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))

正如您所发现的,对于某些使用逗号的语言环境,单个点不被视为小数点分隔符,而对于其他语言环境则相反。

您的问题的可能解决方案是先尝试使用 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)