2017-01-25 10 views
0

Пример программы. просто напечатайте преобразованное значение.Изменения в версии 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; 
} 

Запуск той же программы в Visual Studio 2010 и Visual Studio 2015.

Они показывают различные результаты.

Visual Studio 2010 выход:

-2.01e+001 

Visual Studio 2015 выход:

-2.01e+01 

почему он показывает другой вывод? любой может объяснить.

Благодаря

ответ

0

Научное обозначения в виде <m>E<n> означает м * 10 п, где оба m и n могут быть положительными или отрицательными. Это означает, что -2.01e+001 и -2.01e+01 фактически совпадают (-2.01 * 10). Однако при использовании спецификатора формата e вы можете фактически выводить числа с действительно большими или очень маленькими значениями e, например вы можете вывести 2e150. 3-значный показатель используется для заполнения выходных строк и обеспечения их более равномерности (рассмотрите 2e99, 2e101 против 2e099, 2e101).

Также можно использовать функцию _set_output_format, чтобы изменить количество цифр, которое будет отображаться. Стоит отметить, что на этой странице документации он также заявил, что

По умолчанию вывода чисел с плавающей точкой с помощью таких функций, как Printf, wprintf и связанных с ними функции библиотеки принтов Visual C++ Standard C три цифры для экспонента, даже если три цифры не должны представлять значение экспоненты. Нулевые значения используются для ввода значения до трех цифр.

+0

можно удалить дополнительные проложенный ноль? Если да, то каким образом? Я преобразовал свой проект из VS 2010 в VS 2015 VS 2015 дают мне скомпилируйте такую ​​ошибку «Ошибка в формате: ожидаемый -2.01e + 01, но была -2.01e + 001» –

+0

@VijayKumbhani, пожалуйста, внимательно прочитайте ответ, я уже говорил об этом: 'Также можно использовать функцию _set_output_format для измените количество цифр, которое будет показано. ' – SingerOfTheFall

+0

_set_output_format фактически больше не существует, начиная с VS2015 – bartoli

0

Как отмечено Chux в How to control the number of exponent digits after 'e' in C printf %e?, совместимое поведение состоит в том, чтобы использовать две цифры для экспоненты, если не требуется больше. До VS-2015 VS был несоответствующим. Очевидно, что _set_output_format был предоставлен для обеспечения совместимого поведения.

Поскольку _set_output_format был удален в VS-2015 - и поведение было изменено на двухзначные показатели - нужно предположить, что VS пытается быть более совместимым.

Я нашел это, потому что мне нужно совместимое поведение в моем приложении :-(

 Смежные вопросы

  • Нет связанных вопросов^_^