【问题标题】:Displaying fixed width floating point number before decimal在小数点前显示固定宽度的浮点数
【发布时间】:2015-01-13 02:21:47
【问题描述】:

我想在小数点前显示固定宽度的浮点数。到目前为止,我设法通过取整数部分,显示所需的宽度并在数值前使用“%03d”填充 0,然后显示小数部分来做到这一点。 我想知道是否有标准的显示方式,例如“%3.3f”。 我尝试了以下

printf("value: %3.3f", value);

但结果只有小数点前一位。

我怎样才能实现它?

【问题讨论】:

  • 我是否正确假设如果value = 5.34 你想要输出005.340
  • 是的,这就是我想要展示的内容。

标签: c floating-point avr floating-point-conversion


【解决方案1】:

你可以使用

printf("%07.3f", value);

07 表示打印至少 7 个字符且填充为零。

例如

printf("%07.3f", 3.3);

打印

003.300

【讨论】:

    【解决方案2】:

    你几乎可以实现它。 printf("value: %M.Nf", value); 将在小数点后至少显示 M 字符和 N 数字。

    printf("value: %9.3f", -123.4);   --> " -123.400"
    printf("value: %9.3f", 123456.0); --> "123456.000"
    

    【讨论】:

    • 我试过了,但我不知道为什么它不起作用。 printf("值: %0M.Nf", 值);似乎有效。
    【解决方案3】:
    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch(), system("pause"), or input loop */
    
    int main(int argc, char *argv[]) {
    
        printf("%08.3f", -7.193583);
        return 0;
    }
    

    【讨论】:

    • 最好避免仅使用代码的答案。稍微解释一下它是如何工作的以及为什么它解决了 OP 的问题会大大改善答案。
    【解决方案4】:

    冒着成为一个强大的电力消费者的风险,使用这种格式..

    double offset = 3.14159;
    printf("Offset: %06d.%02d sec", (int)offset, (int)(100*(offset - (int)offset)));
    

    【讨论】:

    • 这个有 4 年历史的问题已经提供了正确答案。这个答案充满了问题:如果转换溢出,(int)offset 是未定义的行为,乘以 100 可以四舍五入并产生100,将double 数字如 3.9999999999999996 显示为“3.100”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2015-09-09
    • 2012-02-11
    • 2017-09-21
    • 2013-06-01
    相关资源
    最近更新 更多