ИНФОРМАЦИЯ за: Уточняване на "g" описател на формат за printf()

Отказ от отговорност за оттеглено съдържание на БЗ

Тази статия е написана за продукти, за които Microsoft вече не предлага поддръжка. Ето защо тази статия се предлага „както е“ и вече няма да бъде актуализирана.

Резюме


В Microsoft C изход вследствие printf() формат описател "g" съвпада точно изход вследствие на формат описател "e" или "f". Документация се посочва, че "g" ще използва "f" или "e" формат, който е по-компактен. Това е вярно в смисъл на цялостната формат, но има някои разлики.


Стойността на точност се интерпретира по различен начин във формат "g" от "f" формат. Документацията обяснява тази разлика. Прецизност "f" задава броя на цифрите след десетичния знак. Точността на "g" задава максималния брой цифри отпечатва. Следващият пример показва разлика, описани в Резюме:

Примерен код

#include <stdio.h>
void main (void)
{
double x = 2.0/3.0; /* 0.666... */
double y;

y = 6.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 66.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 666.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 6666.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 66666.0 + x;
printf ("%.4g\n", y); /* switches to "e" notation here */
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);
}
Резултатите от програмата са правилни, както е показано по-долу:

6.667
6.6667
6.6667e+000

66.67
66.6667
6.6667e+001

666.7
666.6667
6.6667e+002

6667
6666.6667
6.6667e+003

6.667e+004
66666.6667
6.6667e+004
Свойства

ИД на статията: 43392 – Последен преглед: 16.01.2017 г. – Редакция: 1

Обратна връзка