使用需要浮点数的双重功能

时间:2019-03-14 19:48:44

标签: c# parsing

我从文本文件中读取了一个值X。

XCOORD = -75.015

我这样得到它,并将其转换为双精度。

    var dic = File.ReadAllLines("test.txt")
      .Select(l => l.Split(new[] { '=' }))
      .ToDictionary(s => s[0].Trim(), s => s[1].Trim());

    string X = dic["XCOORD"];
    double GivenX = Convert.ToDouble(X);

然后我像这样使用我的函数:

WriteFloat(pointerx, (float)GivenX);

不幸的是,该函数无法正确读取该值。因为只要我这样做,它确实可以工作:

WriteFloat(pointerx, -75.015f);

我认为它不会读取符号-和/或。关于如何完成这项工作有任何想法吗?根据要求,我打印出了X的值:

mRef.showInfo(Convert.ToString(GivenX));

它向我显示:-75015,不带。我将其转换为两倍后将其打印出来。 如果我将其放在这样的文本文件中:XCOORD = -75.015f。它使我的整个程序崩溃。

WriteFloat函数:

public void WriteFloat(long Address, float Value)
        {
            WriteProcessMemory(GetProcessHandle(), Address, BitConverter.GetBytes(Value), 4);
        }

当前,在将其转换为double之前,我已经发现了。它可以很好地打印X:-75.015。将其转换为双精度后,它是:-75015。它错过了。 -75之后。

1 个答案:

答案 0 :(得分:1)

这不是真正的答案,但它回答了很多评论。而且,它不会包含评论

我创建了一个简单的文本文件,如下所示:

XCOORD = -75.015
POSITIVE = 25.123
WHOLE = 123

然后,我将您的代码充实起来,以读取该文件中的所有键/值并将结果写出:

 public static void ConvertTheFloats()
 {
     var dic = File.ReadAllLines("ConvertFloatsData.txt")
         .Select(l => l.Split(new[] { '=' }))
         .ToDictionary(s => s[0].Trim(), s => s[1].Trim());

     var keys = dic.Keys;
     foreach (var key in keys)
     {
         string x = dic[key];
         if (float.TryParse(x, out var floatX))
         {
             Debug.WriteLine($"Success: Key: {key} - String Value: {x} - Float Value: {floatX}");
         }
         else
         {
             Debug.WriteLine($"Failed: Key: {key} - String Value: {x}");
         }
     }
 }

结果如下:

Success: Key: XCOORD - String Value: -75.015 - Float Value: -75.015
Success: Key: POSITIVE - String Value: 25.123 - Float Value: 25.123
Success: Key: WHOLE - String Value: 123 - Float Value: 123

因此,您对文件的解析有效。字典获取代表浮点数的键和字符串(我不打扰双打)。我可以成功地将它们转换为浮点数。值匹配。

您的问题似乎在您尚未发布的代码中。