Java 从整数数据类型检索的值未显示为实际小数
我的表名是TX_table,插入的列是TX_AMOUNT,为“整数”。对于我来说,插入值(比如第一行1234.56和第二行12345.67)是正确的,因为我可以通过放置断点看到这一点。 现在,如果我从TX_AMOUNT列中检索数据,值如下所示 1234.56对于第一行,这是正常的,对于第二行,它显示为12345.7 而不是12345.67。如果我输入的值最多为15位,不带小数 没问题。只有当值带有小数点时,如12345.67所示 比如12345.7 我给出以下代码: 创建表:Java 从整数数据类型检索的值未显示为实际小数,java,android,sqlite,Java,Android,Sqlite,我的表名是TX_table,插入的列是TX_AMOUNT,为“整数”。对于我来说,插入值(比如第一行1234.56和第二行12345.67)是正确的,因为我可以通过放置断点看到这一点。 现在,如果我从TX_AMOUNT列中检索数据,值如下所示 1234.56对于第一行,这是正常的,对于第二行,它显示为12345.7 而不是12345.67。如果我输入的值最多为15位,不带小数 没问题。只有当值带有小数点时,如12345.67所示 比如12345.7 我给出以下代码: 创建表: private s
private static final String CREATE_TX_TABLE= "CREATE TABLE " + TX_TABLE + " (" +TX_UID+ " INTEGER PRIMARY KEY AUTOINCREMENT," + TX_TITLE_UID + " INTEGER," + TX_AMOUNT + " INTEGER," + TX_PARTICULARS + " VARCHAR(255)," + TX_DATE+" DATE," + TX_ID + " VARCHAR(255)," + TX_NAME + " VARCHAR(255)," + TX_CONTRA + " VARCHAR(255)," + TX_LISTVIEW_DATE + " DATE);";
插入:
public void insertTxData(String inputparticulars, String inputamount, String showSelectedTitle, String inputID, String txid, String contraYorNo){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues contentvalues = new ContentValues();
if (inputparticulars.equals("") || inputparticulars.equals(null)){
inputparticulars= "particulars not entered";
}
contentvalues.put(VivzHelper.TX_PARTICULARS,inputparticulars);
// with breakpoint here, the values entered are perfectly getting in
contentvalues.put(VivzHelper.TX_AMOUNT, inputamount);
contentvalues.put(VivzHelper.TX_TITLE_UID, inputID);
contentvalues.put(VivzHelper.TX_ID, MainActivity.txid);
contentvalues.put(VivzHelper.TX_DATE, new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
contentvalues.put(VivzHelper.TX_LISTVIEW_DATE, new SimpleDateFormat("dd-MM-yyyy").format(new Date()));
contentvalues.put(VivzHelper.TX_NAME,showSelectedTitle);
contentvalues.put(VivzHelper.TX_CONTRA,contraYorNo);
db.insert(VivzHelper.TX_TABLE, null, contentvalues);
String td = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
}
数据检索:
String name = titlesofReports.tagExpensesOrIncome;
SQLiteDatabase db = helper.getReadableDatabase();
String[] columns = { helper.TX_UID, helper.TX_NAME, helper.TX_PARTICULARS,
helper.TX_AMOUNT, helper.TX_DATE,helper.TX_CONTRA};
Cursor c = db.query(VivzHelper.TX_TABLE, columns, (helper.TX_ID + "='" + name + "' AND " + helper.TX_DATE + "= '" + td + "'"), null, null, null,null);
gt = 0;
gt_selectedItem_number = 0;
if (c != null) {
c.moveToFirst();
while (c.isAfterLast() == false) {
String v_uid=(c.getString(0));
String txTotal = (c.getString(3));
Float dd=Float.parseFloat(txTotal);
gt = gt + new Float(txTotal);
BigDecimal bdtxTotal= new BigDecimal(c.getString(3));
}
使用断点,当我验证时,我可以看到所有4个变量,如
txTotal
,dd1
,dd
,bdTxTotal
给出了与12345.7相同的结果,而不是12345.67是否检查了保存在DB中的值?这将有助于隔离DB级别或API级别的问题。是的,我使用错误显示的断点检查了问题。这段代码将一个看起来像浮点数的字符串插入到一个整数列中。请决定类型。字符串将12345.67插入整数列。列应该是什么类型。?如果字符串插入1234.56,则按原样检索。如果字符串插入12345.67,则检索值为12345.7I将列类型从+TX_AMOUNT+“INTEGER更改为FLOAT。更改版本号并运行程序。问题仍然存在。我得到的是12345.7,而不是12345.67。