如何将一个看起来像双精度的值正确地转换为无符号长

本文关键字:双精度 正确地 转换 无符号 看起来 一个 | 更新日期: 2023-09-27 18:28:25

我正在C#中编程,我要做的是转换这个包含一个似乎是double的值的string,所以我首先将string转换为double,然后将double类型转换为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-NOT-00090000070EC260,我不知道是什么导致了值的差异
我能想到的唯一可能导致这种值差异的假设是,将double类型转换为unsigned long,在转换值的过程中,double精度的东西正在把事情搞砸。

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

如何将一个看起来像双精度的值正确地转换为无符号长

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

然而,如果我插入90000070EC258并转换为十进制,我会得到2533274908803672,这与您原始解析的值不符。