我使用了%e
格式说明符。已尝试%3.2e
或%4.3e
。
例:
如果var=0.001342
,那么我想打印0.1342e-02
。但打印1.342e-03
如果var=0.543124
,那么我想打印54.3124e-02
。但打印5.43124e-01
如果var=0.0123653
,那么我想打印1.23653e-02
。
这就是价值,我只想修改我的指数值打印结果。
答案 0 :(得分:14)
不可能使用标准浮点格式说明符指定小数分隔符之前的位数。
在小数点前有一个(或零)数字是“科学记数法”的全部要点,所有关于“小数点在哪里”的信息来自指数。
如果你有一些固定的格式(总是e-2),你可能会产生类似的东西:
printf("%f e-2", x*100.0);
修改强>
或者,更多地standard scientific notation:
printf("%f * 10^-3", x*1e3);
答案 1 :(得分:6)
从手册:
eE 双参数已四舍五入并按样式转换 [ - ] d.ddde + -dd,小数点前有一位数 字符和后面的位数等于精度;如果精度丢失,则取6;如果 精度为零,不显示小数点字符。 E转换使用字母
E' (rather than
e')来引入 指数。指数始终包含至少两位数;如果 值为零,指数为00。
eE
用于科学记数法,因此在小数点前只有一个非零数字。
您需要自己进行转换,例如:
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);