Visual Studio 2015 年的格式更改

Format changes in Visual Studio 2015

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

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

运行 2010 年 Visual Studio 和 2015 年 Visual Studio 相同的节目。

它们显示不同的输出。

Visual Studio 2010年产量:

-2.01e+001

Visual Studio 2015年产量:

-2.01e+01

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

谢谢

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

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

By default, the output of floating point numbers by functions such as printf, wprintf, and related functions in the Visual C++ Standard C library prints three digits for the exponent, even if three digits are not required to represent the value of the exponent. Zeroes are used to pad the value to three digits.

正如 Chux 在 中指出的那样,合规行为是使用两位数作为指数,除非需要更多。在 VS-2015 之前,VS 是不合规的。显然 _set_output_format 是为了允许合规行为而提供的。

由于 _set_output_format 在 VS-2015 中被删除 - 并且行为更改为两位数指数 - 我们必须假设 VS 正试图变得更加合规。

我发现这个是因为我的应用程序需要合规行为:-(