首页 > 解决方案 > MySQL如何在使用除法时保持精度?

问题描述

假设我们有在表中检索到的值,这些值是字符串,因此可以将它们分开。我们有这种报告,但我不喜欢通过编程语言处理它,而是通过 1 个 sql 查询运行它来检索所有报告。

为了使这里的查询简短,请看下面的简单 mysql 查询。

select "68078004281240001301" / "1000000000000000000" from {a dummy table};

上面返回一个值68.07800428124,我们0001301在小数点处丢失。

已经尝试过FORMAT()或者ROUND()还没有工作,或者我错过了一些 mysql 功能?


但是在 PHP 中使用 bcmath 时,我们可以这样做

$n = '68078004281240001301';
$d = '1000000000000000000';
bcdiv($n, $d, strlen($d) - 1);

上面的值会给我们一个我们想要的精确度68.078004281240001301


请记住,稍后我将使用它和过滤器进行报告。

标签: phpmysqlprecisiondivisionbcmath

解决方案


我假设困难在于,当您划分两个字符串时 - 实际上是整数,它不知道要使用的值的类型(如精度)。如果您改为将值转换为小数类型,则可以强制它以任何精度工作(最多 65 位)...

select "68078004281240001301" / "1000000000000000000", cast("68078004281240001301" as decimal(60,30))/ cast("1000000000000000000" as decimal(60,30))

给...

"68078004281240001301" / "1000000000000000000"
68.07800428124

cast("68078004281240001301" as decimal(60,30))/ cast("1000000000000000000" as decimal(60,30))
68.078004281240001301000000000000

推荐阅读