Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql double列中存储的数字在多次乘法后是否可能会丢失精度?_Mysql_Sql - Fatal编程技术网

mysql double列中存储的数字在多次乘法后是否可能会丢失精度?

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} 但由于记录是批量删除的,因此需要一些难

我有两张桌子。假设第一个是带有user_id的数字+一些数字(double),每个user_id可以有多行。然后我有另一个用户带有user_id(PRIMARY)+表number中该用户所有数字的乘积

当记录插入到数字或从数字中删除时,我需要重新计算users.product。由于一次只插入一条记录,因此我可以使用以下查询:

UPDATE users SET product=product*{number} WHERE user_id={some_id}
但由于记录是批量删除的,因此需要一些难看的代码来完成这项工作,只需重新计算产品就更简单了。但是,没有产品这样的功能。我可以用

exp(sum(log(coalesce(*number*,1)))

但我不确定我是否会得到一个错误的数字乘积。数字将在1.00到9.99之间。这样会损失多少精度?

如果您使用浮点表示,您的问题的答案是“是”

一般来说,如果你在一个很小的范围内乘以数字,并且只有少数几个数字,这不会是一个问题。如果您对此感到担心,请将数字存储在固定的十进制表示形式中

您获取日志的解决方案很好。对于大多数应用,这将产生足够的精度。但是,如果你致力于向火星发射轨道器,小的误差可能会累积,你不应该依赖数据库来获得高精度的数值精度

请注意,计算顺序也会影响数值精度