Convert.ToDouble使用错误的decimalcperator

时间:2013-02-18 12:35:07

标签: .net vb.net culture

我正在开发一个VB.net 08项目,但代码有一个奇怪的问题。

SyncItemValues(i) = Convert.ToDouble(werte(i-1))

werte(i)是一个字符串列表。

SyncItemValues(i) As Object

werte(i)填充了从MySql数据库导入的整数和实数值。 真实的价值是例如4.6; 5.7; ... 所以decimalseperator是一个“。”

问题是convert-function解释“。”作为一个群体分离者。 所以它将4.5转换为45,这是错误的。

如果我使用“,”作为decimalpeperator或将文化从DE更改为US,结果是正确的。

奇怪的是,到目前为止,该项目已经采用了这种转换方式,而且这些问题以前从未发生过。 对项目进行了一些更改,但转换从未被触及过。 一个dll已被改变,我现在问自己的问题是,如果这种交换导致了奇怪的行为。

我完全不知道出了什么问题。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

  

werte(i)填充了从MySql数据库导入的整数和实数值。

然后不要把它们作为字符串来开始。假设它们确实存储为数据库中的数值,请避免所有字符串转换 - 它们只会造成麻烦。

Convert.ToDouble(String)使用当前的线程文化。您可以使用Double.Parse解析值,如果您确定这是适当的值,则使用CultureInfo.InvariantCulture作为格式提供者 - 但同样,它最好避免转换为字符串以及从字符串开始。