MySQL 使用除法时如何保持精度?
MySQL how to preserve precisions when using division?
假设我们有在表中检索到的值,这些值是字符串,因此可以将它们分开。我们有这种报告,但我不喜欢通过编程语言来处理它,还 运行 它通过 1 sql 查询来检索所有报告。
为了使这里的查询简短,请查看下面的简单 mysql 查询。
select "68078004281240001301" / "1000000000000000000" from {a dummy table};
上面returns一个值68.07800428124
,我们少了0001301
小数点。
已经尝试了 FORMAT()
或 ROUND()
但还是不行,或者我错过了一些 mysql 功能?
但是在PHP中使用bcmath时,我们可以这样做
$n = '68078004281240001301';
$d = '1000000000000000000';
bcdiv($n, $d, strlen($d) - 1);
上面的值将为我们提供我们想要的精确精度68.078004281240001301
请记住,稍后我将使用它和过滤器一起进行报告。
我假设困难在于,当您将两个字符串相除时 - 实际上是整数,它不知道要使用的值的类型(如精度)。如果您改为将值转换为 decimal type,则可以强制它以任何精度(最多 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
假设我们有在表中检索到的值,这些值是字符串,因此可以将它们分开。我们有这种报告,但我不喜欢通过编程语言来处理它,还 运行 它通过 1 sql 查询来检索所有报告。
为了使这里的查询简短,请查看下面的简单 mysql 查询。
select "68078004281240001301" / "1000000000000000000" from {a dummy table};
上面returns一个值68.07800428124
,我们少了0001301
小数点。
已经尝试了 FORMAT()
或 ROUND()
但还是不行,或者我错过了一些 mysql 功能?
但是在PHP中使用bcmath时,我们可以这样做
$n = '68078004281240001301';
$d = '1000000000000000000';
bcdiv($n, $d, strlen($d) - 1);
上面的值将为我们提供我们想要的精确精度68.078004281240001301
请记住,稍后我将使用它和过滤器一起进行报告。
我假设困难在于,当您将两个字符串相除时 - 实际上是整数,它不知道要使用的值的类型(如精度)。如果您改为将值转换为 decimal type,则可以强制它以任何精度(最多 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