c - printf() 中的浮点格式

标签 c floating-point floating-accuracy

我有一个 float 数组,其中数据存储有不同的小数点,所以有些是 123.40000123.45000123.45600...现在如果我想在 printf() 中打印最后不带 0 的字符串中的这些值,则它们是 123.4123.45123.456,最后没有那些 0。这可能吗?如果是,怎么办?

最佳答案

使用 %g 格式化程序:

printf( "%g", 123.4000 );

打印

123.4

尾随零被移除,但不幸的是,如果小数部分为零,尾随小数点也会被移除。我不知道是否真的有任何方法可以直接使用 printf() 做你想做的事——我认为这样的事情可能是你最好的选择:

#include <stdio.h>
#include <math.h>

void print( FILE * f, double d ) {
    if ( d - floor(d) == 0.0 ) {
        fprintf( f, "%g.", d );
    }
    else {
        fprintf( f, "%g", d );
    }
}

int main() {
    print( stdout, 12.0 );
    print( stdout, 12.300 );
}

关于c - printf() 中的浮点格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863602/

相关文章:

python - 他为什么在这个例子中使用 float ?

java - 在 Java 中,我有一个浮点值,我左对齐,但它应该是一个货币值,$ 符号不会向左移动

C:如何进行精确的浮点运算?

ruby - ruby-1.9.2 添加错误

c - 段错误 - 矩阵转置 - C

c++ - 如何使用 cout 以全精度打印 double 值?

c - fputs 中的 fgets 给出段错误

Java - 比 Math.pow() 和 Math.sqrt() 更快的替代方法

我可以为所有 Linux 编译器使用一个 Linux .so 吗?

c - c中如何提高标准矩阵加法算法的效率?