0

値の数値を別のプログラムに入力して に格納する GUI を作成しましたtags。奇妙な変換の問題があります。8.5 を入力すると、文字列 8.500000000000000... が返されるので、TryParseDouble.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 は最初に float に変換され、次に double にキャストされます。次に例を示します。

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 に答える