You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js网站SQLite返回整数而非REAL类型问题求助

解决Node.js中SQLite REAL类型数据被转为整数的问题

刚碰到过类似的坑,结合你的描述(存入0.1查询返回0.0,TYPEOF显示real),大概率是数据插入环节的类型处理出了问题,给你几个具体的排查和解决方向:

1. 先检查表单数据的转换逻辑

表单提交的数值默认是字符串类型,如果处理时误用了parseInt()而不是parseFloat()/Number(),就会把"0.1"转成0,存入REAL列自然就是0.0了。

举个错误示例:

// 错误:parseInt会截断小数部分
const stepVariable = parseInt(req.body.step_variable); // "0.1" → 0

正确的处理方式:

// 方式1:用parseFloat解析浮点数
const stepVariable = parseFloat(req.body.step_variable);
// 方式2:用Number()转换更稳妥
const stepVariable = Number(req.body.step_variable);

2. 插入时强制SQLite按REAL类型存储

即使传入了正确的浮点数,也可以在SQL语句中用CAST()强制指定类型,避免SQLite自动类型转换的意外:

const db = new sqlite3.Database('./your-db.db');
// 插入时CAST参数为REAL
db.run(
  "INSERT INTO your_table (step_variable) VALUES (CAST(? AS REAL))",
  [stepVariable], // 这里确保stepVariable是浮点数类型
  function(err) {
    if (err) console.error(err.message);
  }
);

3. 确认SQLite驱动的类型转换配置

如果你用的是sqlite3模块,默认情况下REAL类型会映射为JavaScript的Number类型,但可以检查连接配置是否有影响数值的选项:

// 确保没有开启numericStrings等会改变类型的配置
const db = new sqlite3.Database('./your-db.db', {
  // 不要设置numericStrings: true,否则会把数值转成字符串
});

4. 查询时避免额外的整数转换

检查查询后的处理代码,有没有无意中把结果转成整数的操作,比如parseInt(row.step_variable),直接取值即可:

db.get(
  "SELECT step_variable, TYPEOF(step_variable) AS type FROM your_table WHERE id = ?",
  [38],
  function(err, row) {
    if (err) console.error(err.message);
    console.log(`实际值:${row.step_variable}`);
    console.log(`SQLite类型:${row.type}`);
    console.log(`JavaScript类型:${typeof row.step_variable}`); // 应该是number
  }
);

按照这几步排查,基本就能解决REAL类型被转成整数的问题了。

内容的提问来源于stack exchange,提问作者Tomkimsour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:38:15