我刚刚将16位数字转换为 float 值。
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
的原始值答案 0 :(得分:2)
float
(或Single
)仅将23
位用于小数部分,因此Single
可以表示整数值无舍入误差
2**(23 + 1) - 1 == 16777215
您可以切换到double
,它具有52
位小数部分,因此可以表示最大为整数的值
2**(52 + 1) - 1 == 9007199254740991 > 4447962230071312
有关详细信息,请参见
https://en.wikipedia.org/wiki/Single-precision_floating-point_format https://en.wikipedia.org/wiki/Double-precision_floating-point_format
代码:
double myVal = 4447962230071312.0;
long originalVal = (long)myVal;