【发布时间】:2019-02-06 12:34:00
【问题描述】:
我刚刚将 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
的原始值【问题讨论】:
-
float(Single) 使用23位作为小数部分。因此,2**24 - 1 == 16777215之外的整数将被四舍五入,并且不可避免地会出现四舍五入错误 -
有什么代码可以解决这个问题吗?什么都没有!
-
您可以尝试将
52位长小数部分更改为double(最多9007199254740991,恰好大于4447962230071312) -
你可以使用
decimal类型 -
为什么要把它转换成
float呢?只需将其保留为long。
标签: c# floating-point