Convert.ToDouble 使用错误的小数分隔符

Posted

技术标签:

【中文标题】Convert.ToDouble 使用错误的小数分隔符【英文标题】:Convert.ToDouble uses wrong decimalseperator 【发布时间】:2013-02-18 12:35:06 【问题描述】:

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

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

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

SyncItemValues(i) As Object

werte(i) 填充了从 mysql 数据库导入的整数和实数值。 实际值是例如4.6; 5.7; ... 所以小数分隔符是一个“.”

问题是转换函数解释“。”作为组分隔符。 所以它将 4.5 转换为 45 这是错误的。

如果我使用“,”作为小数分隔符或将文化从 DE 更改为 US,则结果是正确的。

奇怪的是,到目前为止,该项目一直在进行这种转换,而这些问题以前从未发生过。 对项目进行了几处更改,但从未触及过转换。 一个 dll 已被更改,我现在问自己的问题是这种交换是否会导致奇怪的行为。

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

【问题讨论】:

【参考方案1】:

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

然后不要将它们作为字符串获取。假设它们确实以数值形式存储在数据库中,请避免 all 字符串转换 - 它们只会造成麻烦。

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

【讨论】:

以上是关于Convert.ToDouble 使用错误的小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章

c#里面使textbox里面只能输入数字,或者小数点的代码

c#怎么保留小数

在c#中如何实现判断一个数值是不是为整数(或小数)?

在c#中如何实现判断一个数值是不是为整数(或小数) 谢谢

“System.Convert”并不包含“todouble”的定义

C# convert.todouble问题