类型转换无法正常工作(arduino IDE)

Type casting not working properly (arduino IDE)

大家好,我有一个全球定位系统,我通过图书馆获取经度和纬度。我想要 4 位小数,所以我想将近 20 位小数长数字转换为 4 位小数,所以我将坐标发送到函数中,如下所示。我在每一步都进行调试,发现类型转换不一致。你能告诉我为什么得到那个输出吗?我的意思是我将一个数字除以十进制数字全为零,我得到了一些不寻常的东西,正如你在 final 变量中看到的那样,那太荒谬了。

float conv_4digits(float coordinate){

  Serial.print("coordinate ");Serial.println(coordinate,30);

  float final;
  float var1;
  var1 = (int)coordinate;
  Serial.print("var1 "); Serial.println(var1,30);
  float var2 = coordinate - var1;
  Serial.print("var2 "); Serial.println(var2,30);
  var2 = var2 * 10000;
  Serial.print("var2 "); Serial.println(var2,30);
  float var3 = (int)var2;
  Serial.print("var3 "); Serial.println(var3,30);
  float var4 = var3 / 10000;
  Serial.print("var4 "); Serial.println(var4,30);
  final = var1 + var4;
  Serial.println(final, 10);

  return final;
}

输出

coordinate 34.684024810791015625000000000000
var1 34.000000000000000000000000000000
var2 0.684024810791015625000000000000
var2 6840.248046875000000000000000000000
var3 6840.000000000000000000000000000000
var4 0.684000015258789062500000000000
34.6839981079

有线索吗?我尝试在适用的地方输入强制转换的整数,我得到了十六进制数字。

有没有更好的方法将经纬度输出为4位十进制数并存储在变量中?因为我想制作 if 语句并将它们与一些固定的经度和纬度进行比较,这些经度和纬度具有 4 个十进制数字。

您不能只将浮点数四舍五入为任意小数位数,然后希望浮点数之间的相等比较起作用。浮动相等比较不起作用,这是一个众所周知的问题,例如参见 [​​=12=]

归结起来就是你不能检查X是否等于Y,(如果X和Y是浮点数,)你只能检查X是否大致等于Y。

这意味着您需要执行 if Y + e >= X && X >= Y - e 而不是 X == Y,其中 e 是一个非常小但为正的值。

因此,由于您要进行范围比较,因此无需担心舍入问题。忘记四舍五入。