【问题标题】:printf, how to insert decimal point for integerprintf,如何为整数插入小数点
【发布时间】:2013-08-27 12:50:27
【问题描述】:

我有一个 UINT16 无符号整数说

4455, 312, 560 or 70.

如何使用 printf 在最后两位数字之前插入小数点,以便示例数字显示为

44.55, 3.12, 5.60 or 0.70

如果没有 printf 解决方案,是否有其他解决方案?

我不想使用浮点数。

【问题讨论】:

    标签: c printf


    【解决方案1】:

    %.2d 可以添加额外的填充零

    printf("%d.%.2d", n / 100, n % 100);
    

    例如,如果n560,则输出为:5.60

    编辑:起初我没有注意到它是UINT16,根据@Eric Postpischil 的评论,最好使用:

    printf("%d.%.2d", (int) (x/100), (int) (x%100));
    

    【讨论】:

    • d 可能是错误的格式说明符。 XC16 编译器针对一些字长小的嵌入式处理器。可能xUINT16 类型是unsigned int,应该使用u 说明符。或者可能是UINT16int 短,因此被提升为intd 说明符是正确的。处理这个问题的最简单方法可能是使用 printf("%d.%.2d", (int) (x/100), (int) (x%100)); 强制转换参数。
    【解决方案2】:
    printf("%d.%.2d", x / 100, x % 100);
    

    【讨论】:

    • d 可能是错误的格式说明符。 XC16 编译器针对一些字长小的嵌入式处理器。可能xUINT16类型是unsigned int,应该使用u说明符。或者可能是UINT16int 短,因此被提升为intd 说明符是正确的。处理这个问题的最简单方法可能是使用 printf("%d.%.2d", (int) (x/100), (int) (x%100)); 强制转换参数。
    【解决方案3】:

    你可以直接使用printf不使用float

    printf("%d.%02d", num/100, num%100);
    

    %02d 表示右对齐零填充。

    if num is 4455 ==>output is 44.55  
    if num is 203  ==>output is 2.03
    

    编辑:
    通过看到@ Eric Postpischil 的评论,最好这样使用。

    printf("%d.%02d", (int) (num/100), (int) (num%100));
    

    【讨论】:

      【解决方案4】:

      int x1000 精度 1234123 -> 1234.123

      printf("%4d.%.3d\n", x / 1000, x % 1000);
      

      如果您需要四舍五入到小数点后 2 位

      printf("%4d.%.2d\n", ((x+5)/10) / 100, ((x+5)/10) % 100);
      

      仅测试为阳性

      input        print
      000004       0.00
      000005       0.01
      
      000014       0.01
      000015       0.02
      
      000100       0.10
      000101       0.10
      
      000105       0.11
      000994       0.99
      000995       1.00
      ...
      

      【讨论】:

      • snprintf(sbuf,sizeof(sbuf),"Vcc = %2u.%.3u\n", (int)(x / 1000), (int)(x % 1000));如果您使用的是 long
      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 2021-10-09
      • 2018-08-04
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多