我正在使用Arduino串行通信将数字输入到Arduino程序中。
但是每当我在arduino串行com中插入浮点数或双数时,
数字的精度不能精确到字符串值。
以下图片可帮助您解释发生的情况。
字符串是我输入串行输入的内容,而double是将数字转换为double时的输入。
String GPSNumCor1;
double GPSNumCor;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
Serial.println("What is the number of your GPS Coordinate? ");
while (Serial.available() == 0);
GPSNumCor1 = Serial.readString();
GPSNumCor=GPSNumCor1.toDouble();
Serial.print("String: ");
Serial.println(GPSNumCor1);
Serial.print("Double: ");
Serial.println(GPSNumCor,15);
}
据我所知,这应该按照我从此处开始的youtube视频来完成。
https://www.youtube.com/watch?v=VIa_QZWIonQ
也许会失败,因为数字中的小数位数过多?
答案 0 :(得分:2)
在诸如Arduino Uno之类的AVR Arduino上,double
与float
相同,具有32位(IEEE 754)。所有固定大小的浮点数据类型仅支持有限的精度。 32位浮点具有7-8个小数位精度,适合您的33.33333061...
。所有3
之后的数字是将二进制数字转换回十进制的结果。因此,如果没有(复杂/缓慢)的多精度浮点库,您将无法在AVR Arduino上处理如此高精度的数字而不会丢失一些数字。