我有一种奇怪的行为,试图在选择使用 SQLite3 时进行一些简单的计算。 可能它的方法是错误的,因为可能最好避免在sqlite上进行计算。因此,为了避免这些问题,我在javascript代码上移动了数学运算(它是一个Titanium应用程序)。
顺便说一句,我通常在进行计算之前知道sqlite"转换"数据到数字类型,如下所示: http://www.sqlite.org/datatype3.html#operators
"所有数学运算符(+, - ,*,/,%,<<,>>,&和|)强制转换 执行之前的两个操作数到NUMERIC存储类"
在我的情况下,当SUM(值)返回一个整数时,以下/ 100截断了删除所有十进制数的值,而使用SUM(值)数字时,以下/ 100按预期工作。
任何人都可以解释我这里发生了什么,为什么?我无法理解我是否犯了错误,或者它是否是sqlite中的一个错误(非常荒谬)。
答案 0 :(得分:2)
NUMERIC表示INTEGER或REAL。您的原始值已经是数字,因此对NUMERIC的强制转换不会改变任何内容。
如果所有非NULL输入都是整数,则sum()的结果为整数值。如果sum()的任何输入既不是整数也不是NULL,则sum()返回浮点值,该值可能是真实总和的近似值。
如果组中的所有值都是整数,则sum()
返回一个整数,并且除法是整数除法。
如果您无法确保所有表值都是REAL,则必须通过将结果转换为REAL或仅除以100.0
来强制以浮点完成除法。