Значение постоянной экспоненты с использованием 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
.
Это то, что когда-либо может быть значением, я просто хочу исправить значение показателя экспоненты для печати результата.
Ответы
Ответ 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);