egg icon indicating copy to clipboard operation
egg copied to clipboard

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

Open poyiding opened this issue 5 years ago • 4 comments

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

poyiding avatar Feb 11 '20 12:02 poyiding

这是 JS 本身的精度问题

atian25 avatar Feb 13 '20 02:02 atian25

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

poyiding avatar Feb 15 '20 08:02 poyiding

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

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

wujiedong avatar Aug 31 '20 07:08 wujiedong

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

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

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

poyiding avatar Sep 03 '20 02:09 poyiding