我刚刚将 16 位数字转换为浮点值。
float myVal =(float) 4447962230071312;
Console.WriteLine(myVal);
这给出了输出:4.44796223007131E+15
我尝试了下面的代码,
long originalVal = (long)myVal;
Console.WriteLine(originalVal);
这给出了输出:4447962352582656
Console.WriteLine(myVal.ToString("0.#########"));
这给出了输出:4447962000000000
既然,如何找回4447962230071312的原始价值
float
(或Single
(仅对小数部分使用23
位,因此Single
可以表示整数值,而不会产生舍入误差
2**(23 + 1) - 1 == 16777215
您可以切换到具有52
位小数部分的double
,因此最多可以表示整数值
2**(52 + 1) - 1 == 9007199254740991 > 4447962230071312
有关详细信息,请参阅
https://en.wikipedia.org/wiki/Single-precision_floating-point_formathttps://en.wikipedia.org/wiki/Double-precision_floating-point_format
法典:
double myVal = 4447962230071312.0;
long originalVal = (long)myVal;