0

我创建了一个程序来读取/写入来自另一个程序的数据。我在程序中设置了一个值 7(类型为 memory real),然后当我在 Visual Studio 中读取该值时,它给了我一个 string 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:此代码是我程序的一部分,值和其他变量已经定义

4

3 回答 3

6

跳过正则表达式并使用 TryParse

Double.TryParse 方法

Int32.TryParse 方法

或者可以只格式化“N0”

d.ToString("N0")

于 2012-10-11T19:53:03.640 回答
0

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

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

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

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

如果您需要在正则表达式中考虑十进制值:

if (Regex.IsMatch(value, "^[0-9]+(\.[0-9]+)?$"))
...
于 2012-10-11T19:48:58.863 回答
0

你的问题没有清楚地描述value来自哪里。

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

参考: Double.ToString 方法 (String)
标准数值格式字符串
自定义数值格式字符串
Double.TryParse 方法 (String, Double%)

于 2012-10-11T20:03:54.643 回答