【发布时间】:2020-12-07 06:01:57
【问题描述】:
我有一个 MCU,它向 LCD 发送一系列数字以显示。我需要发送他们的 ASCII 对应值才能使其正常工作。这些数字是浮点类型,小数部分的精度不超过 2 位。
问题是我需要一个函数来解析浮点数,获取其数字而不反转它们,将它们转换为 ASCII,并将逗号的 ASCII 代码放在数字中的位置。
例子:
数字 = 123.45
result = 49 50 51 44 52 53 //其中44是逗号的ASCII码
对编写一个可以做到这一点的函数有什么建议吗? 如果结果变量一次只保留一个 ASCII 代码,那就太棒了,因为我需要一次为每个符号调用 WriteToLCD 函数。
另外,我真的无法访问 sprintf、itoa、ftoa 等库函数。
一些代码示例:
void LCD_print(int number)
{
char aux;
int naux=0,maux=0;
while(number!=0)
{
maux=number%10;
naux=naux*10+maux;
number=number/10;
}
while(naux)
{
aux=naux%10+'0';
WriteToLCD(aux);
naux=naux/10;
}
}
我从互联网上的某个地方得到了这个函数,它在将整数转换为 ASCII 方面做得很好,但我需要将参数变成浮点数并将点的 ASCII 代码添加到结果中。
Main 看起来像这样:
void main()
{
//other stuff
float number = ReadValueFromSensor();
LCD_print(number);
}
【问题讨论】:
-
"这些数字是浮点类型,小数部分的精度不超过 2 位。" -- 该浮点数是以IEEE 754 格式之一还是其他格式存储的?
-
一个小点... 46(十进制)是
.的ASCII码[不是 44是,]。 -
当我说不超过2位精度时,我的意思是我不需要向LCD发送超过2位,其余的可以忽略。想也许它可以帮助你们的算法编辑:谢谢克雷格,我会编辑这篇文章
-
你能显示一些代码吗?至少函数声明? 在代码中如何使用它?
number = 123.45C 中的数字表示是怎样的?它是char[]数组还是float变量(或_Accum变量:)?你用的是什么单片机?你有硬件浮动支持吗?I dont really have access to library functions like sprintf为什么?作为一般建议,如果您的 MCU 不支持硬件浮点数,请考虑不使用浮点数 - 而是坚持使用整数。Any suggestions for writing a function that can do this?太宽泛了。你到底有什么问题? -
如果您只需要小数点后两位精度,您可以将浮点值乘以 100,然后将其转换为 C 中的
int。这样,您将获得一个整数这比期望值高 100 倍。之后您必须做的就是打印各个数字并将小数点插入正确的位置。但是,这将导致向零舍入,这可能是不希望的。
标签: c