java - 没有请求的Android sqlite舍入数字

标签 java android database sqlite android-sqlite

我创建了一个简单的 sqlite 表:

private static final String TABLE_CREATE = "CREATE TABLE tab1("
                + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + "amount NUMERIC NOT NULL DEFAULT 0"
                + ");";

db.execSQL(TABLE_CREATE);

但是当我将值插入表中时,它们会四舍五入:

INSERT INTO tab1(amount) VALUES (123456789.12) // Becomes 1.23457e+08
INSERT INTO tab1(amount) VALUES (12345.67)     // Becomes 12345.7
INSERT INTO tab1(amount) VALUES (300087.59)    // Becomes 300088
INSERT INTO tab1(amount) VALUES (3000001.22)   // Becomes 3e+06

如何将完整的数字保存到表中并且仍然能够使用如下查询:

SELECT * FROM tab1 WHERE amount < 0

编辑:

@MikeT 感谢您的建议,我正在使用 Cursor getString 方法。 现在我使用 getDouble 方法,然后转换为 BigDecimal 并四舍五入,它解决了问题。

最佳答案

我认为您的问题在于如何提取值,而不是如何存储它们。

看起来您正在使用 Cursor getString 方法。

尝试改用 Cursor getFloatgetDouble 方法。

以下(摘自 How flexible/restricive are SQLite column types? )向您展示了各种 Cursor get???? 方法的结果(getBlob 中的异常已被捕获并处理):-

对于 Double myREAL = 213456789.4528791134567890109643534276; :-

08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes: Column=REAL_COL<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:  VALUE AS INT >>213456789<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:  VALUE AS LONG >>213456789<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:  VALUE AS STRING >>2.13457e+08<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:  VALUE AS DOUBLE >>2.134567894528791E8<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:  VALUE AS FLOAT >>2.1345678E8<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:  VALUE AS SHORT >>6037<<
08-08 09:19:03.658 13575-13575/mjt.soqanda D/ColTypes:      Unable to handle with getBlob.

SQlite 在存储值方面非常灵活。简而言之,任何值都可以存储在任何列类型中,并且每一行/列都有自己独特的类型。

您可能希望阅读 Datatypes In SQLite Version 3

关于java - 没有请求的Android sqlite舍入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47421551/

相关文章:

sql - Oracle SQL,条件外键

sql - 俄语、德语和阿拉伯语使用哪种排序规则

java - 在 IntelliJ IDEA 中执行的 Maven Selenium WebDriver 项目中出现编码警告

java - 如何在未启用日志记录功能的情况下在 Out 拦截器中获取 http 响应正文?

android - 在 RecyclerView 上滑动测试片状

android - 使用 kSoap2 在 android 中访问 WebService

java - 我们可以根据文件名和位置创建 FileItem 对象吗?

java - 重用部分代码

Android Studio Google Cloud Endpoints 运行/调试配置错误

php - 从数据库获取最后一个 ID 到字符串/Int 变量