php - 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
请记住,稍后我将使用它和过滤器进行报告。
解决方案
我假设困难在于,当您划分两个字符串时 - 实际上是整数,它不知道要使用的值的类型(如精度)。如果您改为将值转换为小数类型,则可以强制它以任何精度工作(最多 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
推荐阅读
- wordpress - 无法导入图库的任何图片
- java - JVM 堆使用变化。这个图正常吗?
- google-chrome-extension - 事件处理程序中的错误,类型错误:无法读取未定义的属性“更新”
- c# - Microsoft DependencyInjection 到 Ninject DI
- angular - 安装材料颜色选择器后,ng build 无法正常工作
- mysql - 从 mysql 选择查询中删除行
- android - 在 android 模拟器上以 xamarin 形式下载文件
- php - Laravel 导出到 Excel
- apache - Apache2 服务器和转发路由器上的两个端口
- scala - scala.jdk.CollectionConverters 的性能损失