【发布时间】:2015-04-07 21:26:29
【问题描述】:
大家好,我有一个全球定位系统,我通过图书馆获取经度和纬度。我想要 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 个十进制数字进行比较。
【问题讨论】:
-
在 C 中使用
printf()格式说明符:printf("%.4f", 34.68402481);