如何将一个看起来像双精度的值正确地转换为无符号长
本文关键字:双精度 正确地 转换 无符号 看起来 一个 | 更新日期: 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,这与您原始解析的值不符。