egg-mysql 执行update或者 insert 后,float类型字段精度不正确

ufj5ltwl  于 4个月前  发布在  Mysql
关注(0)|答案(4)|浏览(50)

What happens?

const params = {
  id: 3,
  plan_name: 'testAdd_upd999',
  plan_no: '3452422424',
  begin_date: '2019-12-15',
  end_date: '2020-02-11',
  amount: 23231.13
};

await this.app.mysql.update('plan', params)

使用egg-mysql 数据库, 上面执行后数据库 plan 表更新成功,但是 amount字段的value为:23231.1,精度不对,amount为float类型。
而通过在 navicat 客户端执行同样逻辑sql语句更新数据:

UPDATE plan SET plan_name = 'dd234422', amount=2342.33 WHERE id = 3 ;

amount字段精度正常,value为 23231.13

最小可复现仓库

请使用 npm init egg --type=simple bug 创建,并上传到你的 GitHub 仓库

复现步骤,错误日志以及相关配置

相关环境信息

  • 操作系统
    mac
  • Node 版本
    v10.16.2
  • Egg 版本
    2.15.1
vd8tlhqk

vd8tlhqk1#

这是 JS 本身的精度问题

z31licg0

z31licg02#

这是 JS 本身的精度问题
那sql 语句是正常的,egg-mysql 执行后不是应该和sql执行一样么?如何解决这种问题呢?

axkjgtzd

axkjgtzd3#

这是 JS 本身的精度问题
那sql 语句是正常的,egg-mysql 执行后不是应该和sql执行一样么?如何解决这种问题呢?

金额在mysql中分2个字段存放,一个存整数的值,一个存小数的值,前端使用.进行字符串切割

isr3a4wc

isr3a4wc4#

这是 JS 本身的精度问题
那sql 语句是正常的,egg-mysql 执行后不是应该和sql执行一样么?如何解决这种问题呢?

金额在mysql中分2个字段存放,一个存整数的值,一个存小数的值,前端使用.进行字符串切割

可以转成分来存,既能保证精度又可以计算金额准确

相关问题