Arduino sprintf浮动没有格式化

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)

您可以更改最小宽度和精度以匹配要转换的浮点数.

  • 在我的情况下工作得很好.竖起大拇指! (4认同)

Cam*_*mer 7

正如之前所说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 类的实例。有多个版本可以从不同的数据类型构造字符串(即将它们格式化为字符序列),包括:

  • 双引号中的常量字符串(即字符数组)
  • 单个常量字符,在单引号中
  • String 对象的另一个实例
  • 常量整数或长整数
  • 使用指定基数的常量整数或长整数
  • 整数或长整数变量
  • 整数或长整数变量,使用指定的基数
  • 浮点数或双精度数,使用指定的十进制数

  • 对上述指针的重要通知:“当您修改 String 对象或销毁它时,c_str() 之前返回的任何指针都将无效,不应再使用。” (3认同)
  • 它甚至将第二个参数作为精度,“String(3.1434, 4)” (3认同)