提问人:Twagnah 提问时间:8/16/2023 最后编辑:Twagnah 更新时间:8/16/2023 访问量:57
使用 arduino::String 打印格式而不是值的双精度字符串?
Double to string with arduino::String prints format instead of value?
问:
我一直在一个项目中遇到这种情况,我正在做大量的双精度和浮点到字符串的转换,但我已将其缩减为非常小的东西,以展示问题。
void setup() {
double num = 123456789.12;
String numString = String(num);
Serial.print("Num String: ");
Serial.println(numString.c_str());
}
// outputs
// Num String: %4.2f
我相信有人会看到这个并说,当然,这是预期的行为!但我真的很难理解为什么。我一辈子都无法在使用 Serial.print 的日志记录输出中获得正确格式化、精确、双精度或浮点数打印。我已经尝试过其他字符串转换技术,例如:
template <typename T>
std::string MyStringUtil::ToStringWithPrecision(const T a_value, const int n)
{
std::stringstream stream;
stream << std::fixed << std::setprecision(n) << a_value;
return stream.str();
}
但这也返回了同样的东西,我认为是一个格式字符串,但我可能是错的。
谁能解释一下导致这种输出的机制?就上下文而言,这是在 Sparkfun Redboard Nano 上运行的。
编辑:
void setup() {
double num = 123456789.12;
String numString = String(num);
Serial.print("Num String: ");
Serial.print(num);
Serial.print(" | ");
Serial.println(numString);
}
// outputs
// Num String: 123456789.12 | %4.2f
为了增加上下文,这一切都是使用 Arduino IDE 运行的,输出是通过串行监视器直接从 USB 连接的 Redboard Nano 以 9600 波特率读取的。
答: 暂无答案
评论
String numString(num);
c_str()
Serial.println(numString)