打印和调试时Visual C ++值有所不同?

时间:2013-11-08 10:22:04

标签: c++ c visual-c++ visual-studio-debugging

我正在检查一段代码。一切都是正确的,但我无法理解的概念。

double a = 0.001;
double b = 0.001;
double c = a * b;

printf ("%lf", c);

在visual c ++中进行调试时,我在第3行之后将鼠标指向c时显示9.999999999999995e-007,但在打印时显示正确的结果,即0.000001。我想知道它在调试工具提示中显示的值以及它如何表示和转换。

2 个答案:

答案 0 :(得分:3)

这是printf执行舍入的结果。

printf格式%lf舍入为默认精度。从我的头脑中,我认为默认值为6,这就是为什么你得到0.000001。

调试器显示double的实际内容。由于浮点运算的性质,0.001 * 0.001的结果实际上不是0.000001,而是近似值,但差异非常小。

通过使用其他格式,您可以看到差异。例如。尝试printf(“%。15e”,c);

答案 1 :(得分:0)

从double / float到字符串的转换有不同的实现,并且基于它会得到不同的结果。我知道的mos准确实现是std::sringstream,我知道至少在IOS设备上与printf不同。

据我所知,visual studio界面是用C#编码的,所以你可能想看看C#如何将双精度转换为字符串以获得你想要的答案。

勒兹。