示例程序。只需打印转换后的值。
#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,其中m
和n
都可以是正的或负的。这意味着-2.01e+001
和-2.01e+01
实际上是同一个数字(-2.01*101)。但是,当使用e
格式说明符时,您实际上可以输出具有非常大或非常小e值的数字,例如,您可以输出2e150
。三位数指数用于填充输出字符串,使其更加均匀(考虑2e99, 2e101
与2e099, 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试图更符合要求。
我发现这是因为我需要在我的应用程序中的兼容行为:-(