mysql double列中存储的数字在多次乘法后是否可能会丢失精度?
我有两张桌子。假设第一个是带有user_id的数字+一些数字(double),每个user_id可以有多行。然后我有另一个用户带有user_id(PRIMARY)+表number中该用户所有数字的乘积 当记录插入到数字或从数字中删除时,我需要重新计算users.product。由于一次只插入一条记录,因此我可以使用以下查询:mysql double列中存储的数字在多次乘法后是否可能会丢失精度?,mysql,sql,Mysql,Sql,我有两张桌子。假设第一个是带有user_id的数字+一些数字(double),每个user_id可以有多行。然后我有另一个用户带有user_id(PRIMARY)+表number中该用户所有数字的乘积 当记录插入到数字或从数字中删除时,我需要重新计算users.product。由于一次只插入一条记录,因此我可以使用以下查询: UPDATE users SET product=product*{number} WHERE user_id={some_id} 但由于记录是批量删除的,因此需要一些难
UPDATE users SET product=product*{number} WHERE user_id={some_id}
但由于记录是批量删除的,因此需要一些难看的代码来完成这项工作,只需重新计算产品就更简单了。但是,没有产品这样的功能。我可以用
exp(sum(log(coalesce(*number*,1)))
但我不确定我是否会得到一个错误的数字乘积。数字将在1.00到9.99之间。这样会损失多少精度?如果您使用浮点表示,您的问题的答案是“是” 一般来说,如果你在一个很小的范围内乘以数字,并且只有少数几个数字,这不会是一个问题。如果您对此感到担心,请将数字存储在固定的十进制表示形式中 您获取日志的解决方案很好。对于大多数应用,这将产生足够的精度。但是,如果你致力于向火星发射轨道器,小的误差可能会累积,你不应该依赖数据库来获得高精度的数值精度 请注意,计算顺序也会影响数值精度