以双倍格式科学打印,没有整数部分

问题描述 投票:5回答:5

一个简单的问题,但我无法获得有关这种格式的文档:我想以Fortran科学计数法打印浮点数,其整数部分始终为零。

 printf("%0.5E",data); // Gives 2.74600E+02

我想这样打印:

 .27460E+03

如何获得尽可能干净的结果?

c double scientific-notation
5个回答
1
投票

[如果您只关心整数部分为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);
}

否则,您必须绕过字符串。请注意,上面的代码仅旨在帮助您入门。它当然不处理任何涉及的案件。


1
投票

我尝试使用log10()pow()进行此操作,但最终遇到了舍入错误的问题。因此,正如[C​​0]所评论的那样,字符串操作可能是最好的方法。

@Karoly Horvath

1
投票

字符串操作方法:


1
投票

|x| > DBL_MAX/10将无法使用某种特殊格式一步一步达到OP的目标。使用printf()形成初始文本结果是一个很好的第一步,在尝试使用字符串操作进行“数学”操作时必须格外小心。


0
投票

fortran移植时遇到相同的问题。未找到标准C格式的DId :(实现了两种方法-使用log10 / pow和使用字符串操作。

© www.soinside.com 2019 - 2024. All rights reserved.