【发布时间】:2013-08-27 12:50:27
【问题描述】:
我有一个 UINT16 无符号整数说
4455, 312, 560 or 70.
如何使用 printf 在最后两位数字之前插入小数点,以便示例数字显示为
44.55, 3.12, 5.60 or 0.70
如果没有 printf 解决方案,是否有其他解决方案?
我不想使用浮点数。
【问题讨论】:
我有一个 UINT16 无符号整数说
4455, 312, 560 or 70.
如何使用 printf 在最后两位数字之前插入小数点,以便示例数字显示为
44.55, 3.12, 5.60 or 0.70
如果没有 printf 解决方案,是否有其他解决方案?
我不想使用浮点数。
【问题讨论】:
%.2d 可以添加额外的填充零
printf("%d.%.2d", n / 100, n % 100);
例如,如果n 是560,则输出为:5.60
编辑:起初我没有注意到它是UINT16,根据@Eric Postpischil 的评论,最好使用:
printf("%d.%.2d", (int) (x/100), (int) (x%100));
【讨论】:
d 可能是错误的格式说明符。 XC16 编译器针对一些字长小的嵌入式处理器。可能x 的UINT16 类型是unsigned int,应该使用u 说明符。或者可能是UINT16 比int 短,因此被提升为int,d 说明符是正确的。处理这个问题的最简单方法可能是使用 printf("%d.%.2d", (int) (x/100), (int) (x%100)); 强制转换参数。
printf("%d.%.2d", x / 100, x % 100);
【讨论】:
d 可能是错误的格式说明符。 XC16 编译器针对一些字长小的嵌入式处理器。可能x的UINT16类型是unsigned int,应该使用u说明符。或者可能是UINT16 比int 短,因此被提升为int,d 说明符是正确的。处理这个问题的最简单方法可能是使用 printf("%d.%.2d", (int) (x/100), (int) (x%100)); 强制转换参数。
你可以直接使用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));
【讨论】:
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
...
【讨论】: