如何在调试器或控制台中输出所有小数位的双精度值

时间:2011-01-19 07:18:01

标签: c# visual-studio-2008

我希望在调试应用程序时完全提取double值,这样我就可以使用它构建一个测试用例来输入我的几何算法。

如何将double值提取 - 直到C#中double数据类型允许的最后一个小数位 - 并在调试器窗口中输出,或使用Console.WriteLine命令?

编辑:我的问题是,如果我坚持输入整个double值,直到最后一位数字,那么将double值作为输入的算法将失败。由于我想在测试用例中重现它,这就是为什么我需要双值的完整表示。

2 个答案:

答案 0 :(得分:2)

我有一个DoubleConverter class,根据它的声音完全你想要什么。像这样使用它:

string text = DoubleConverter.ToExactString(doubleValue);

您需要确保理解仅仅因为输出具有大量数字,这并不意味着它具有那么多精度。您可能希望阅读我在binary floating point in .NET上的文章以获取更多信息 - 当然,您可能会首先了解所有这些内容。

请注意,如果您只想要一个可以往返的字符串值,则不需要任何额外的代码 - 只需使用“r”格式说明符:

string text = doubleValue.ToString("r");

我同意Jackson Pope在测试的平等比较中使用容差的一般方法,但我发现有时看到双精度值所代表的确切值是有用的。它可以更容易理解为什么特定的计算以某种方式出现。

答案 1 :(得分:1)

而不是尝试将二进制数作为十进制数输出到非常大的小数位并进行精确比较,而是与作为可接受错误的epsilon值进行比较,并将epsilon设置得非常小。 E.g。

 double epsilon = Math.Abs(actual - expected);
 Assert.That(epsilon, Is.LessThan(0.000000000001);