0

我正在用 C# 编程,我想要做的是将它转换为string包含一个似乎是 a 的值double,所以我首先将转换string为 a double,然后我将其类型转换double为 a unsigned long。唯一的问题是,unsigned long总是比我假设接收的值大几位或低几位。但是在我将其类型转换double为之后unsigned long,我将其转换为十六进制string并填充它。

这是我正在做的一个例子:

string ValueToParse = "2.53327490880368E+15";
double nValue1 = double.Parse(ValueToParse);
ulong nValue2 = (ulong)nValue1;
string str = nValue2.ToString("X16");

以下是结果:

string str = "00090000070EC260";

这就是问题:

现在这对普通程序员来说似乎没有什么问题。
但是我想要做的是得到它,以便返回的值是我正在寻找的真实00090000070EC258结果——不是——00090000070EC260而且我不知道是什么导致了这种值的差异。
我能想到的唯一可能导致这种值差异的假设与将 类型转换double为 an有关unsigned long,并且在值被转换的过程中,具有精度的double东西会搞砸事情。

因此,如果有人可能知道出了什么问题或对可能出了什么问题有任何想法,请做出回应。我感谢可以提供的任何帮助。谢谢。:)

4

1 回答 1

3

如果我将 90000070EC260 插入程序员的计算器并将其转换为十进制,我会得到 2533274908803680 的结果,它对应于您的原始解析值。

但是,如果我将 90000070EC258 插入并转换为十进制,我会得到 2533274908803672,这与您的原始解析值对应。

于 2013-08-19T23:30:29.127 回答