top*_*l32 2 .net c# floating-point double
我正在尝试转换Single为Double保持原始值.我找到了以下方法:
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)
转换是准确的.所有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.1999998092651368是5.2