C 编程:模数是不是忽略结果中的前导零?我怎样才能阻止它? [复制]

Posted

技术标签:

【中文标题】C 编程:模数是不是忽略结果中的前导零?我怎样才能阻止它? [复制]【英文标题】:C Programming: Does Modulus Ignore Leading Zeros in Result ? How Can I Stop It? [duplicate]C 编程:模数是否忽略结果中的前导零?我怎样才能阻止它? [复制] 【发布时间】:2017-10-03 06:13:34 【问题描述】:

我正在用 C 语言编写微控制器,由于编译器或芯片不能很好地处理浮点数,建议将浮点值放大到足以去掉小数,然后在输出数字时,通过比例除法将其缩小,并使用模数来查找和显示小数部分。这是一个例子: 以号码25.0625 开头。乘以10000 得到250625。很好,现在我们没有浮动了。现在要显示它,我们使用这样的一行:

sprintf(buffer, "%li.%i", Temp / 10000, abs(Temp % 10000));

所以我们首先通过/ 1000025 取出,然后通过% 10000 取出0625。但问题是:看起来我的模数结果忽略了 0625 中的前导零,因此当它将数字连接在一起时,它变为 25.625 而不是 25.0625。我不能指望总是有一个前导零,所以在里面填一个零不是答案,而且在其他时候可能有几个前导零。我的问题是,如何抑制模数排除前导零?谢谢。

【问题讨论】:

数字上不存在前导零;使用%04i 将整数格式化为四位宽。 数字没有前导零,它们只是数字。可以使用%04d格式打印4位数字。 顺便说一句,sprintf(buffer, "%li.%i", Temp / 10000, abs(Temp % 10000));Temp = -123 的输出肯定是错误的。 【参考方案1】:

您可以告诉sprintf 将数字格式化为带有前导零的 4 位字段。

sprintf(buffer, "%li.%04d", Temp / 10000, abs(Temp % 10000));

见Printing leading 0's in C?

【讨论】:

%.4d 也做同样的工作。有些人认为它比%04d 更受欢迎。 @JonathanLeffler 我在刚刚链接到的问题的任何答案中都没有看到该建议。 它似乎不见了。在走得更远之前,我想为“有些人……”找到一个参考。 x-red 也是关于邮政编码而不是整数/定点算术。 @JonathanLeffler here 是一个讨论差异的问题,它只影响负数。以我的经验,%04d 更惯用。 @chux 好点,因为整数对于-1234/10000 没有负零。代码需要检查这种情况。

以上是关于C 编程:模数是不是忽略结果中的前导零?我怎样才能阻止它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C编程十进制到二进制 - 将前导零添加到递归方法

在 C 中存储前导零

PHP in_array()忽略第一个参数中的前导0(零)[重复]

正则表达式替换但忽略最后一个字符

在 C# 汇编版本中使用前导零是不是合适?

在C中保持前导零[重复]