【发布时间】:2015-06-12 03:01:26
【问题描述】:
我正在尝试将Single 转换为Double,同时保持原始值。我找到了以下方法:
Single f = 5.2F;
Double d1 = f; // 5.19999980926514
Double d2 = Double.Parse(f.ToString()); // 5.2 (correct)
这种做法值得推荐吗?我不需要最佳方法,但必须将预期值传递给 double。将四舍五入的值存储在 double 中是否会产生后果?
【问题讨论】:
-
并不是所有的浮点数都能准确表示,这就是为什么 5.2 变成 5.19999980926514。
-
从二进制的角度来看,确实如此。 5.2 不能准确地表示为二进制浮点数,因此它可以为您提供最接近的值。
-
我明白了,但是字符串转换不是一个大胆的举动吗?可以避免吗?
-
你用这些数字在做什么?是的,将单转换为字符串并解析为双精度可能不是最好的方法。
-
@DStanley - 最好是硬编码,但我也可能不会假设。浮点逻辑是我绝对的恶习;我真正需要知道的是;如何将
Single转换为Double,同时在值确实是硬编码的情况下保持可表示性,因为值在某些时候被序列化。我想我明白直接将Single转换为Double是无害的,但这是一个演示问题。
标签: c# .net floating-point double