Visual Studio 2015中的格式更改

时间:2017-01-25 06:11:45

标签: c++ visual-studio-2010 visual-studio-2015 printf

示例程序。只需打印转换后的值。

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    char buffer[256] = "";
    sprintf_s(buffer, "%.2e", -20.12345);
    cout << buffer << endl;;
    return 0;
}

在Visual Studio 2010和Visual Studio 2015中运行相同的程序。

他们显示不同的输出。

Visual Studio 2010输出:

-2.01e+001

Visual Studio 2015输出:

-2.01e+01

为什么显示不同的输出? 任何人都可以解释。

由于

2 个答案:

答案 0 :(得分:2)

<m>E<n>形式的科学记数法表示m * 10 n ,其中mn可以是正数或负数。这意味着-2.01e+001-2.01e+01实际上是相同的数字(-2.01 * 10 1 )。但是,使用e格式说明符时,实际上可以输出具有非常大或非常小的 e 值的数字,例如,您可以输出2e150。 3位指数用于填充输出字符串并使其更均匀(考虑2e99, 2e101 vs 2e099, 2e101)。

也可以使用_set_output_format函数来更改将显示的位数。值得注意的是,在该文档页面上也说明了

  

默认情况下,Visual C ++标准C库中的printf,wprintf和相关函数等函数的浮点数输出会为指数打印三位数,即使不需要三位数来表示该值也是如此。指数。零用于将值填充为三位数。

答案 1 :(得分:0)

如Chux在How to control the number of exponent digits after 'e' in C printf %e?中所指出的,合规行为是指数的两位数,除非需要更多。在VS-2015之前,VS不合规。显然提供了_set_output_format以允许合规行为。

由于在VS-2015中删除了_set_output_format - 并且行为已更改为两位指数 - 必须假设VS正在尝试更加合规。

我发现这是因为我需要在我的应用程序中使用兼容行为: - (