如果我启动Android应用程序,应用程序会从数据库调用一些数据并将此数据保存在设备上的本地SQL数据库中。有一个值很大的值,所以我需要BigInteger来存储它。如果我尝试从本地DB调用该值,则会收到错误:
java.lang.NumberFormatException: Invalid BigInteger: 3.23431e+23
这是我将值存储在本地db中的方法:
...
values.put(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG, String.valueOf(battery.get(i).getServiceTag()));
...
db.insert(BatteryEntryContract.BatteryEntry.TABLE_NAME_BATTERY, null, values);
这是我从本地数据库中调用它的方式:
...
String serviceTagValue = cursor.getString(
cursor.getColumnIndexOrThrow(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG));
batteryFromDb.setServiceTag(new BigInteger(serviceTagValue));
...
我是否必须以特殊的方式格式化数据库中的值,而不是使用... e + 23?
修改 这是列类型的设置方式:
...
BatteryEntry.COLUMN_NAME_SERVICE_TAG + " TEXT DEFAULT 0," +
....
当我尝试
时...
values.put(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG,
String.valueOf(battery.get(i).getServiceTag()));
...
Log.i("---",values+"");
db.insert(BatteryEntryContract.BatteryEntry.TABLE_NAME_BATTERY, null, values);
当我从那里得到它时,外部数据库中的值保存为numeric(24,0)
我将其保存为本地数据库中的字符串。当我Log.i("---",values+"");
("值"将保存在本地数据库中)时,数字将显示正确:
.... serviceTag=323431303230313631333331 ....
答案 0 :(得分:0)
如果您这样做会发生什么:
String serviceTagValue = cursor.getString(
cursor.getColumnIndexOrThrow(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG));
BigDecimal bdec = new BigDecimal(serviceTagValue);
batteryFromDb.setServiceTag(bdec.toBigInteger());