嗨,大家好,我有一个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个十进制数字进行比较。
最佳答案
您不能只将浮点数四舍五入到任意数目的十进制数字,然后希望浮点数之间的相等比较将起作用。浮点数相等比较不起作用,这是一个众所周知的问题,例如,请参见What's wrong with using == to compare floats in Java?
归结为,您无法检查X是否等于Y(如果X和Y为浮点数),则只能检查X是否大致等于Y。
这意味着您需要执行X == Y
而不是Y + e >= X && X >= Y - e
,其中e是一些很小但为正的值。
因此,由于您将要进行范围比较,因此您不必担心舍入。忘记舍入。
关于c# - 类型转换无法正常运行(arduino IDE),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28387761/