Mis*_*een 40 c++ printf arduino
我有这个arduino草图,
char temperature[10];
float temp = 10.55;
sprintf(temperature,"%f F", temp);
Serial.println(temperature);
Run Code Online (Sandbox Code Playgroud)
温度打印出来
? F
Run Code Online (Sandbox Code Playgroud)
有关如何格式化浮点数的任何想法?我需要它是一个字符串.
Din*_*l24 97
由于某些性能原因%f
未包含在Arduino的实现中sprintf()
.更好的选择是使用dtostrf()
- 您将浮点值转换为C风格的字符串,方法签名如下所示:
char *dtostrf(double val, signed char width, unsigned char prec, char *s)
Run Code Online (Sandbox Code Playgroud)
使用此方法将其转换为C样式字符串,然后使用sprintf,例如:
char str_temp[6];
/* 4 is mininum width, 2 is precision; float value is copied onto str_temp*/
dtostrf(temp, 4, 2, str_temp);
sprintf(temperature,"%s F", str_temp);
Run Code Online (Sandbox Code Playgroud)
您可以更改最小宽度和精度以匹配要转换的浮点数.
正如之前所说sprintf
,Arduino 中不包含 Float 支持。
Arduino 有自己的String类。
String value = String(3.14);
Run Code Online (Sandbox Code Playgroud)
然后,
char *result = value.c_str();
Run Code Online (Sandbox Code Playgroud)
构造 String 类的实例。有多个版本可以从不同的数据类型构造字符串(即将它们格式化为字符序列),包括: