Arduino串行通信双精度问题

时间:2019-11-19 07:16:26

标签: arduino

我正在使用Arduino串行通信将数字输入到Arduino程序中。

但是每当我在arduino串行com中插入浮点数或双数时,

数字的精度不能精确到字符串值。

以下图片可帮助您解释发生的情况。

enter image description here

字符串是我输入串行输入的内容,而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

也许会失败,因为数字中的小数位数过多?

1 个答案:

答案 0 :(得分:2)

在诸如Arduino Uno之类的AVR Arduino上,doublefloat相同,具有32位(IEEE 754)。所有固定大小的浮点数据类型仅支持有限的精度。 32位浮点具有7-8个小数位精度,适合您的33.33333061...。所有3之后的数字是将二进制数字转换回十进制的结果。因此,如果没有(复杂/缓慢)的多精度浮点库,您将无法在AVR Arduino上处理如此高精度的数字而不会丢失一些数字。