`junit.framework.ComparisonFailure: Value '37.87159' did not match the expected value '37.87159'. LocationTable Error expected:<37.871[59]> but was:<37.871[6]>`
在创建数据库的时候数据类型使用了REAL, FLOAT 和 DECIMAL(5, 5) 都没有办法解决。感觉是SQlite自己把那个数字给弄少了一位... 不知道怎么破... qwq
1
loveyu 2015-08-09 09:23:18 +08:00
直接存字符串能成功么?如果可以就取得时候手动转换吧
|
2
q5we66fg 2015-08-09 11:08:20 +08:00
表示感兴趣,最好给出断言前后的代码还有表的结构
|
5
ufo22940268 2015-08-09 12:14:04 +08:00
assertEquals("Value '" + entry.getValue().toString() +
"' did not match the expected value '" + expectedValue + "'. " + error, expectedValue.substring(0, 6), gotValue.substring(0, 6)); 为什么不把 entry.getValue().toString() 替换成gotValue.substring(0, 6) |
6
ufo22940268 2015-08-09 12:14:36 +08:00
如果直接执行
assertEquals(expectedValue.substring(0, 6), gotValue.substring(0, 6)); 这个呢 |
7
20015jjw OP @ufo22940268
现在我写的是考虑到有的Entry长度不足6,Java又不支持超长度的slicing,就只能预先判断expectedValue和gotValue的长度是不是超过6,如果超过就切到前6个,否则保留,然而这个办法实在是很低级。至于你的第二条回复,没有改善。 这个问题实在是太奇妙了,如果我输入的经纬后面小数位数小于4,就不会报错,等于或者多于4,就会被缩掉一位。不是每次都会被缩到3位,而是如果后面小数有6位,就会被缩到5位。。。 |
8
freeznet 2015-08-09 14:40:37 +08:00
问题应该出在java从sqlite获取数据后转换成你想要的数据类型上, 因为sqlite本身是没有类型定义的, 所有数据都是以字符串储存, 然后再在应用场景中转换成对应的类型的.
这种时候我觉得应该先确定到底是储存的时候数据就错了 还是取出的时候把对的数据变成了错的 |
9
thinkloki 2015-08-09 17:57:48 +08:00
int idx = valueCursor.getColumnIndex(columnName);
assertFalse("Column '" + columnName + "' not found. " + error, idx == -1); String expectedValue = entry.getValue().toString(); String gotValue = valueCursor.getString(idx); 你这段 valueCursor.getString(idx); 这一行代码用错了。你存储的时候第三行跟第四行的数据存的是double类型的,用这个方法cursor.getDouble()。 要不让然的话 ContentValues testValues = new ContentValues(); testValues.put(WeatherContract.LocationEntry.COLUMN_LOCATION_SETTING, "Beijing"); testValues.put(WeatherContract.LocationEntry.COLUMN_CITY_NAME, "Beijing"); testValues.put(WeatherContract.LocationEntry.COLUMN_COORD_LAT, "39.916"); testValues.put(WeatherContract.LocationEntry.COLUMN_COORD_LONG, "116.383"); 第三行第四行put的时候加上字符串,妥妥滴。 我只是推测。没有写代码实验,问题应该出在这里。 |