一个简单的问题,但我无法获得有关这种格式的文档:我想以Fortran科学计数法打印浮点数,其整数部分始终为零。
printf("%0.5E",data); // Gives 2.74600E+02
我想这样打印:
.27460E+03
如何获得尽可能干净的结果?
[如果您只关心整数部分为0
而没有真正忽略0
,即,如果您对0.27460E+03
而不是.27460E+03
感到满意,则可以执行以下操作:
#include <stdio.h>
#include <stdlib.h>
void fortran_printf();
int main(void)
{
double num = 274.600;
fortran_printf(num);
exit(EXIT_SUCCESS);
}
void fortran_printf(double num)
{
int num_e = 0;
while (num > 1.0) {
num /= 10;
num_e++;
}
printf("%.5fE+%02d", num, num_e);
}
否则,您必须绕过字符串。请注意,上面的代码仅旨在帮助您入门。它当然不处理任何涉及的案件。
我尝试使用log10()
和pow()
进行此操作,但最终遇到了舍入错误的问题。因此,正如[C0]所评论的那样,字符串操作可能是最好的方法。
@Karoly Horvath
字符串操作方法:
|x| > DBL_MAX/10
将无法使用某种特殊格式一步一步达到OP的目标。使用printf()
形成初始文本结果是一个很好的第一步,在尝试使用字符串操作进行“数学”操作时必须格外小心。
fortran移植时遇到相同的问题。未找到标准C格式的DId :(实现了两种方法-使用log10 / pow和使用字符串操作。