0

我创建了一个 GUI,它将一个值编号输入另一个程序并将它们存储在tags. 我有一个奇怪的转换问题。当我输入 8.5 时,我得到一个字符串 8.500000000000000... 所以我使用TryParseandDouble.ToString()方法来解决这个问题。但奇怪的是,当我尝试使用 6.9 时,字符串变为 6.9000000005367431600000。我使用了 2 个 dll,这可能是导致此问题的原因。我已阅读此Decimals 解释,但我不明白如何解决我的问题。如何解决这个转换问题?

我的转换方法

    private bool TryWrite()
            {
// Read() returns a string(which represents int,double, float or string) read from another application
                string Oldcopy = _inTouchWrapper.Read(tagNameBox.Text);
// Write() Write my input number into the application stored in a specific tag
                _inTouchWrapper.Write(tagNameBox.Text, ValueBox.Text);
//OldCopy is to input back the old copy is the Write (new copy) cannot be performed
                string newCopy = _inTouchWrapper.Read(tagNameBox.Text);

                if (ValueBox.Text == Double.Parse(newCopy).ToString())
                {
                    return true;
                }
                else
                {
                    _inTouchWrapper.Write(tagNameBox.Text, Oldcopy);
                    return false;
                }
            }

关于软件/和我的代码的更多解释。该软件有标签,例如:Alarm1、TimeString... 每个标签都有一个类型(int、real(a float)、string)和一个值。该值取决于类型。如果标签类型是 int,我无法输入 5.6。所以我创建了这个方法来验证输入值是否确实可以添加到软件中。它是如何工作的:我在软件中输入一个值,将其读回,如果添加的值与读取的值匹配,我确实输入了它。否则,我输入回 oldCopy。

4

1 回答 1

1

似乎字符串“6.9”没有直接转换为double。If 首先转换为浮点数,然后转换为双精度数。这是一个例子:

var f = float.Parse("6.9");
var d = (double)f;
System.Diagnostics.Debug.WriteLine(d.ToString()); //6.90000009536743

PS:为什么你对'8.5'没有同样的问题是它可以完全以二进制形式表示。

于 2012-10-12T13:07:38.480 回答