如何解决在 ATMega328P 的 Arduino IDE 中 round() 结果错误
使用 round() 时出现意外结果:
#include <Arduino.h>
int main(void) {
init();
Serial.begin(9600);
float a = 1.0;
float b = round(a);
Serial.println(b); // prints "1.50"
delay(100);
return 0;
}
获得期望值 1.0
的技巧是什么?
解决方法
看来我发现了问题:
该问题是由 Arduino.h 中的 round()
宏引起的:
#define round(x) ({ typeof (x) _x = (x); _x >= 0 ? (long)_x + 0.5 : (long)_x - 0.5; })
您必须将 round()
结果转换为整数类型才能获得预期的浮点数:
float a = 1.0f;
float b = (int16_t) round(a);
Serial.println(b); // "1.00"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。