int to unknown to double conversion issue

时间:2012-10-11 19:45:00

标签: c# .net user-interface dll type-conversion

我创建了一个程序来读取/写入来自另一个程序的数据。我在程序中设置了一个值7(类型为memory real),然后当我在visual studio中读取它时,它给了我一个字符串7.0000000000000。所以我创建了这个转换片段,它适用于int类型的数据,它也在VS中给我一个字符串。我不知道这两种数据类型之间的区别,但从逻辑上讲,如果两种数据类型都给我一个字符串,我应该能够运行这段代码。为什么内存真实数据会跳过if?

 if (Regex.IsMatch(value, "^[0-9 ]+$"))
                {
                    ValueBox.Text = Double.Parse(value).ToString();
                }
                else
                {
                    ValueBox.Text = value;
                }

编辑:我使用了2个给定的dll,我相信dll中存在转换问题,但我的代码仍然工作。

编辑2:此代码是我的程序的一部分,值和其他变量已经定义

3 个答案:

答案 0 :(得分:6)

跳过正则表达式并使用TryParse

Double.TryParse Method

Int32.TryParse Method

或者只需格式化“N0”

d.ToString( “NO”)

答案 1 :(得分:0)

你的正则表达式在数字范围之后有一个额外的空间,但这不应该是一个太大的问题。它的编写方式,你的正则表达式将匹配任何数字或空格序列。

这只匹配一个整数字符串:

if (Regex.IsMatch(value, "^[0-9]+$"))
...

我不确定这是否是基于value初始化的问题,但它肯定不会与整数字符串匹配。

如果您需要在正则表达式中考虑小数值:

if (Regex.IsMatch(value, "^[0-9]+(\.[0-9]+)?$"))
...

答案 2 :(得分:0)

您的问题没有明确说明value的来源。

我怀疑您应该使用其中一个重载的.ToString()方法将原始数据类型转换为value
然后转换ValueBox.Text返回使用Convert.ToDouble()(或所需输出类型的适当方法)。您也可以使用我喜欢的Double.TryParse()(或适当的类型)。

参考文献: Double.ToString Method (String)
Standard Numeric Format Strings
Custom Numeric Format Strings
Double.TryParse Method (String, Double%)