浮点转换为字符串,而不sprintf的() [英] Convert float to string without sprintf()
本文介绍了浮点转换为字符串,而不sprintf的()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在编码一个基于微控制器的应用程序,我需要一个浮动
转换为字符串,但我并不需要的sprintf相关的重开销( )。是否有任何雄辩的方式来做到这一点?我不需要太多。我只需要2位precision的。
I'm coding for a microcontroller-based application and I need to convert a float
to a character string, but I do not need the heavy overhead associated with sprintf(). Is there any eloquent way to do this? I don't need too much. I only need 2 digits of precision.
推荐答案
试试这个。它应该是美好而小型的。我已经输出字符串直接 - 做一个printf,而不是sprintf的。我会离开它你为返回的字符串分配空间,以及作为结果复制到它。
Try this. It should be nice and small. I've output the string directly - doing a printf, rather than a sprintf. I'll leave it to you to allocate space for the return string, as well as copying the result into it.
// prints a number with 2 digits following the decimal place
// creates the string backwards, before printing it character-by-character from
// the end to the start
//
// Usage: myPrintf(270.458)
// Output: 270.45
void myPrintf(float fVal)
{
char result[100];
int dVal, dec, i;
fVal += 0.005; // added after a comment from Matt McNabb, see below.
dVal = fVal;
dec = (int)(fVal * 100) % 100;
memset(result, 0, 100);
result[0] = (dec % 10) + '0';
result[1] = (dec / 10) + '0';
result[2] = '.';
i = 3;
while (dVal > 0)
{
result[i] = (dVal % 10) + '0';
dVal /= 10;
i++;
}
for (i=strlen(result)-1; i>=0; i--)
putc(result[i], stdout);
}
这篇关于浮点转换为字符串,而不sprintf的()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文