Подтвердить что ты не робот

Значение постоянной экспоненты с использованием printf в c

Я использовал спецификатор формата %e. Пробовал %3.2e или %4.3e.

Пример:
if var=0.001342, тогда я хочу напечатать 0.1342e-02. Но отпечатки 1.342e-03
if var=0.543124, то я хочу напечатать 54.3124e-02. Но отпечатки 5.43124e-01
if var=0.0123653, тогда я хочу напечатать 1.23653e-02.

Это то, что когда-либо может быть значением, я просто хочу исправить значение показателя экспоненты для печати результата.

4b9b3361

Ответ 1

Из руководства:

eE Двойной аргумент округляется и преобразуется в стиле              [-] d.ddde + -dd, где есть одна цифра перед десятичной точкой              символ и количество цифр после того, как оно равно точности; если точность отсутствует, она принимается равной 6; если              точность равна нулю, символ десятичной точки не отображается. Преобразование E использует букву E' (rather than e '), чтобы ввести              показатель. Показатель всегда содержит не менее двух цифр; если              значение равно нулю, показатель равен 00.

eE для научной нотации, поэтому только одна не-nul цифра перед десятичной точкой.

Вам нужно сделать преобразование самостоятельно, например:

float number = 0.01023;
float normalized = number*100;
int mantissa_int_part = normalized;
int mantissa_decimal_part = (normalized-mantissa_int_part)*10000;
printf("%02d.%04d e-2",mantissa_int_part,mantissa_decimal_part);

Ответ 2

Невозможно указать число знаков до десятичного разделителя со стандартными спецификаторами формата с плавающей запятой.

Весь смысл "научной нотации" иметь одну (или нулевую) цифру перед десятичной точкой, и вся информация о "где находится десятичная точка" происходит от экспонента.

Если у вас есть фиксированный формат (всегда e-2), вы можете создать что-то вроде:

printf("%f  e-2", x*100.0);

Edit

Или, чтобы сделать его более стандартная научная нотация:

printf("%f * 10^-3", x*1e3);