将float转换为double

top*_*l32 2 .net c# floating-point double

我正在尝试转换SingleDouble保持原始值.我找到了以下方法:

Single f = 5.2F;
Double d1 = f; // 5.19999980926514
Double d2 = Double.Parse(f.ToString()); // 5.2 (correct)
Run Code Online (Sandbox Code Playgroud)

这种做法值得推荐吗?我不需要最佳方法,但必须将预期值传递给double.在双倍中存储舍入值是否会产生影响?

小智 11

您可以使用“十进制”而不是字符串。

float f = 5.2F;
decimal dec = new decimal(f);//5.2
double d = (double)dec; //5.2
Run Code Online (Sandbox Code Playgroud)


xan*_*tos 5

转换是准确的.所有Single值都可以用Double值表示,因为它们以相同的方式"构建",只有更多可能的数字.你所看到的5.2F实际上就是这样5.1999998092651368.如果你去http://www.h-schmidt.net/FloatConverter/IEEE754.html并插入5.2,你会看到它的指数为2 ^ 2(所以4),并且尾数为1.2999999523162842.现在,如果你乘以这两个数字,你会得到5.1999998092651368.

Single最大精度为7位,因此.NET仅显示7位数.稍微舍入5.19999980926513685.2

  • 5.1999998092651368本身就是一个舍入值.它不能完全表示为二进制分数.最接近5.2的浮点数是5.19999980926513671875.最接近5.2的是5.20000000000000017763568394002504646778106689453125 (2认同)