在不丢失信息的情况下将字符串列表转换为双精度列表 (VB.net)
Converting a List of String to List of Double without losing information (VB.net)
我得到了一个字符串列表。当我尝试将条目转换为 Double 类型时,我丢失了信息(点)。我做错了什么?
Dim list As New List(Of String)
Dim a As Double
list.Add("309.69686")
a = CDbl(list(0))
MsgBox(a)
'Output: 30969686
如果您使用德语 Windows,则点将被解释为千位分隔符。如果您需要其他行为,则必须明确指定文化。
Dim d = Double.Parse("309.69686", CultureInfo.InvariantCulture)
发生这种情况是因为在您的语言环境中,十进制数字的分隔符可能不是点而是其他东西(通常是逗号)。
您正在使用旧的 VB6 方法将此字符串转换为双精度,此方法 (CDbl) 无法使用不同的区域设置。
因此,在最基本的形式中,您需要将该方法更改为本机 .NET 方法
a = Double.Parse(list(0), CultureInfo.InvariantCulture)
这里我们传递有关 Parse 在将输入字符串转换为双精度字符串时应使用何种语言环境设置的信息。而 InvariantCulture 使用点作为分隔符。
当然,您应该考虑到,如果输入字符串是从用户输入中获取的,那么您可能会面临其他问题(例如无效的数字字符串)。在这种情况下,您不应使用 double.Parse,而应使用 double.TryParse
我得到了一个字符串列表。当我尝试将条目转换为 Double 类型时,我丢失了信息(点)。我做错了什么?
Dim list As New List(Of String)
Dim a As Double
list.Add("309.69686")
a = CDbl(list(0))
MsgBox(a)
'Output: 30969686
如果您使用德语 Windows,则点将被解释为千位分隔符。如果您需要其他行为,则必须明确指定文化。
Dim d = Double.Parse("309.69686", CultureInfo.InvariantCulture)
发生这种情况是因为在您的语言环境中,十进制数字的分隔符可能不是点而是其他东西(通常是逗号)。
您正在使用旧的 VB6 方法将此字符串转换为双精度,此方法 (CDbl) 无法使用不同的区域设置。
因此,在最基本的形式中,您需要将该方法更改为本机 .NET 方法
a = Double.Parse(list(0), CultureInfo.InvariantCulture)
这里我们传递有关 Parse 在将输入字符串转换为双精度字符串时应使用何种语言环境设置的信息。而 InvariantCulture 使用点作为分隔符。
当然,您应该考虑到,如果输入字符串是从用户输入中获取的,那么您可能会面临其他问题(例如无效的数字字符串)。在这种情况下,您不应使用 double.Parse,而应使用 double.TryParse