在 C# 中格式化双精度值
输出双精度值时,C# 在应用任何格式之前会自动将它们四舍五入到 15 位有效数字。这可能会导致格式化输出与 double 的实际值之间的差异。
String.Format 的问题:
C# 中的 String.Format 方法仅影响显示格式化的数字。它不会调整基础双精度值的精度。因此,String.Format("{0:F20}", i) 将显示 20 位小数,但 double 的实际值可能仍然在内部四舍五入到 15 位小数。
示例:
考虑以下代码:
double i = 10 * 0.69; Console.WriteLine(String.Format(" {0:F20}", i));
输出将是 6.90000000000000000000 ,即使 i 的实际值更接近 6.89999999999999946709。
解决方案:
要输出 double 的精确十进制值,您可以使用 Jon Skeet's双转换器类。此类有一个 ToExactString 方法,该方法返回双精度型的精确十进制表示形式。然后,您可以根据需要格式化字符串。
例如:
double i = 10 * 0.69; Console.WriteLine(DoubleConverter.ToExactString(i));
这将输出 6.89999999999999946709294817992486059665679931640625 ,这是 i.
的精确十进制表示形式以上是如何在 C# 中准确输出 Double 的精确十进制值?的详细内容。更多信息请关注PHP中文网其他相关文章!