我有一个4位数宽的整数,我使用sprintf将其转换为字符串。这个字符串数组应该表示一个十进制数XX. XX。eg.
uint16_t Value;
char buff [10];
Value = 1234;
sprintf(buff,"%04d", (unsigned int)Value);
我想显示这一点说,液晶显示器或液晶显示器12.34。最简单(粗糙)的方法是解析并输出数组,逐个元素,插入小数点,然后输出数组的其余部分。有没有更好的方法来做到这一点?
编辑:我想我有点过于简化了。要打印的数字可以是00.00和99.99之间的任何数字。
sprintf(buff,"%04d”,(unsigned int)Value);
我假设这将垫与领先的0的时候需要的。这种编码扭曲的主要原因是为了避免浮点运算和printf的使用。我会把一个字符串指针传递给一个函数,这个函数会一个字符一个字符地显示。
4条答案
按热度按时间mo49yndu1#
如果你只处理4位宽的整数,一个简单的解决方案可能是:
kqhtkvqz2#
注意:这两个都不会形成空终止的C字符串。通常,LCD显示器的API提供了一个更简单(更快)的选项,可以将“n”字符写入显示器。
如果这是一个微控制器,你不想所有的(笨重的,也许 * 未使用 *)机器的
printf()
,有以下:如果是
val < 1000
或val > 9999
,这仍然有效。或者,你可能希望它是一个循环:
k4emjkb13#
如果你知道总有4位数,你可以做到这一点,而不做任何额外的算术:
输出:
25.00
50pmv0ei4#
表示十进制数XX.XX
一个简单的方法是将值转换为浮点数,然后打印。
如果想避免浮点运算,将整数和分数打印为2部分。
注意
Value
是一个 unsigned 类型。对于 signed 类型,我们需要在fraction中避免'-'
在所有情况下,16位
uint16_t
可能具有1000-9999范围之外的值(“我有一个整数4位”),因此OP需要定义该范围之外的所需输出。一个简单的技术来确保
Value < 10000
,即使我们“知道”Value
不应该是5位数: