gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:21:07 25 4
gpt4 key购买 nike

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

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 位小数的固定经度和纬度进行比较。

最佳答案

您不能仅将 float 舍入为任意数量的十进制数字,然后希望 float 之间的相等比较能够起作用。浮点相等比较不起作用,这是一个众所周知的问题,例如参见 What's wrong with using == to compare floats in Java?

归根结底,你无法检查 X 是否等于 Y,(如果 X 和 Y 是 float ),你只能检查 X 是否大致等于 Y。

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

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

关于c# - 类型转换无法正常工作(arduino IDE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com