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));
所以我们首先通过/ 10000
将25
取出,然后通过% 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 编程:模数是不是忽略结果中的前导零?我怎样才能阻止它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章