Visual Studio 2015中的格式更改

Format changes in Visual Studio 2015

本文关键字:格式 Studio 2015 Visual      更新时间:2023-10-16

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

#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

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

感谢

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

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

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

正如Chux在《如何控制';e';在C printf%e?中?,顺从的行为是使用两位数字作为指数,除非需要更多数字。在VS-2015之前,VS是不合规的。显然,提供_set_output_format是为了允许兼容行为。

由于_set_output_format在VS-2015中被删除,并且行为被更改为两位数的指数,因此必须假设VS试图更符合要求。

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