使用除法时如何保持精度?

8mmmxcuj  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(503)

假设我们在表中有检索到的值,这些值是字符串,所以可以将它们分开。我们有这种类型的报表,但我不喜欢通过编程语言来处理它,而是通过一个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 请记住,我将在以后的报告中使用这个过滤器。

pftdvrlh

pftdvrlh1#

我假设困难在于,当你将两个字符串(实际上是整数)分开时,它不知道要使用的值的类型(如精度)。如果改为将值强制转换为decimal类型,则可以强制它以任何精度工作(最多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

相关问题