如何从浮点数取回原始值(实数)而不在C#中包含指数符号?

时间:2019-02-06 12:34:00

标签: c# floating-point

我刚刚将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

的原始值

1 个答案:

答案 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;