Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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
Php MySQL使用除法时如何保持精度?_Php_Mysql_Precision_Division_Bcmath - Fatal编程技术网

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

Php MySQL使用除法时如何保持精度?,php,mysql,precision,division,bcmath,Php,Mysql,Precision,Division,Bcmath,假设我们有在表中检索到的值,这些值是字符串,所以可以将它们分开。我们有这种报告,但我不喜欢通过编程语言来处理它,而是通过sql查询来检索所有报告 为了简化这里的查询,请看下面的简单mysql查询 select "68078004281240001301" / "1000000000000000000" from {a dummy table}; 上面返回的值为68.07800428124,小数点处为0001301 已经尝试过格式化或圆形,但还没有工作,或者我错过了一些mysql函数 但是在PH

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

为了简化这里的查询,请看下面的简单mysql查询

select "68078004281240001301" / "1000000000000000000" from {a dummy table};
上面返回的值为68.07800428124,小数点处为0001301

已经尝试过格式化或圆形,但还没有工作,或者我错过了一些mysql函数

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

$n = '68078004281240001301';
$d = '1000000000000000000';
bcdiv($n, $d, strlen($d) - 1);
上面的值将给出我们想要的准确精度68.078004281240001301


请记住,我将在以后的报告中与过滤器一起使用它。

我假设困难在于,当您分割两个字符串(实际上是整数)时,它不知道要使用的值的类型。如果您改为将值强制转换为,则可以强制它以高达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

这太完美了!