Java 小数点后8位的双精度小加法:Android
关于这件事,我还是有点不知所措。我对正在发生的事感到困惑。我在sqlite数据库中存储了一个3.542。使用Firefox sqlite viewer检查数据库时确认了这一点。然后,我使用以下代码检索该值:Java 小数点后8位的双精度小加法:Android,java,android,double,Java,Android,Double,关于这件事,我还是有点不知所措。我对正在发生的事感到困惑。我在sqlite数据库中存储了一个3.542。使用Firefox sqlite viewer检查数据库时确认了这一点。然后,我使用以下代码检索该值: public double getCaffPer(String type) { SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); builder.setTables(DRKTYPES); String[] c
public double getCaffPer(String type) {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(DRKTYPES);
String[] columns = { MGCAFF };
String[] selectionArgs = { type };
Cursor cursor;
cursor = builder.query(ourDatabase, columns, TYPE + "=?",
selectionArgs, null, null, null);
float result = -1;
if (cursor.getCount() != 0) {
cursor.moveToFirst();
result = cursor.getFloat(0);
}
cursor.close();
return result;
}
调试显示结果的值为3.542。但后来在我的代码中,我将此方法称为:
double caff = helper.getCaffPer(typeName);
它给了我3.54200005531104。我知道这没有多大区别,但我不明白为什么要添加末尾的内容。任何帮助都将不胜感激 发生该行为是因为您将
结果
声明为浮点
,但getCaffPer()
返回一个双精度
。Java在这两种类型之间进行静默转换,这导致了输出的差异。发生这种行为是因为您将结果
声明为浮点
,但getCaffPer()
返回一个双精度
。Java在这两种类型之间进行静默转换,这导致了输出的差异。因为result
被声明为float
。因为result
被声明为float
。将其声明为float解决了问题。但是我想知道为什么在转换为双精度时,所有的垃圾都会添加到末尾。@MES无论是double
还是float
都不能存储一个数字的精确值。关于细节,我建议您研究一下浮点数是如何存储的。将其声明为浮点数解决了这个问题。但是我想知道为什么在转换为双精度时,所有的垃圾都会添加到末尾。@MES无论是double
还是float
都不能存储一个数字的精确值。关于细节,我建议您研究一下浮点数是如何存储的。