php - 从 MySQL 中以正确的精度选择 float

标签 php mysql

我已经搜索和阅读但仍然卡住的常见问题。

我有一个包含交易的表格,其中交易价格被声明为 float 价格。我不能使用小数,因为不同的股票在价格上有不同的精度。

如果通过 phpMyAdmin 查看表格,所有数字看起来都是正确的 - 因为它们是插入的,正如您在下面的屏幕截图中看到的那样,价格 (p) 是 0.709,这是正确的。

enter image description here

但是当我使用常规 zend 框架从表中选择该交易时,我得到的价格是 0.70899999141693

如何进行与 MyAdmin select 相同的选择?并以正确的精度接收号码? 如果 myAdmin 完成这项工作,它也可以在 zend 中实现,对吗

编辑:我不能使用 ROUND 也不能使用 DECIMAL 因为我不知道正确的精度。 例如Apple 的价格有 2 位小数,但 VTB 银行的价格有 6 位小数

EDIT2:这里有更多关于 myAdmin 和 zend 中相同选择的示例。

交易 8838397 的价格为 0.01156。我已将它插入数据库,这就是我在 myAdmin 中得到的:

enter image description here

如果我用 php 选择它,我得到这个:

enter image description here

我假设,myAdmin 以某种方式猜测精度并且做得非常好。怎么样???

最佳答案

引用“我有一个包含交易的表格,其中交易价格被声明为 float 价格。我不能使用小数,因为不同的股票在价格上有不同的精度。”

我敢说这是胡说八道。如果您想要精确的数据,请使用精确的类型。只有当值超出 DECIMAL 提供的范围时,您才会使用 float,而这里不是这种情况。 DECIMAL(65,30) 处理最多 30 个数字位的值。我想这应该足以满足您的所有值(value)观。

我想您在这里混合了内部存储和数据显示。如果小数位数是需要的信息,则存储此信息:

trade_id  office  price  precision
12345678  123456  0,709  4

A query:

select trade_id, office, round(price, precision) as price
from trades;

结果:

trade_id  office  price
12345678  123456  0,7090

编辑:至于“MyAdmin 不知何故已经解决了它,我只是无法理解如何”:

事实并非如此。我怀疑输入的 0.120 会显示 0.120,输入的 0.12000 会显示 0.12000。 dbms 将为两者存储相同的浮点值,而 phpMyAdmin 无法告诉它们将被区别对待。 phpMyAdmin 可能做的唯一一件事就是舍入到最大小数位数,比如 6。select round( 0.70899999141693 , 6) 结果为 0.709。

关于php - 从 MySQL 中以正确的精度选择 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27523070/

相关文章:

php - 如何在不删除mysql中的组的情况下获取所有记录

mysql - MySQL中的快速页面检索,索引使用?

php - Symfony 4 - Autowiring 不工作

php - 无法定位您指定的型号 : modelName

mysql - 使用子查询时 WHERE 子句中的未知列

php - MySQL 字母数字值的自然排序

MySQL 连接子字符串

php - 从数据库中选择和编码 base 64 图像时发现速度缓慢

php - LAMP 堆栈在一个 linux 服务器上使用 apache 和 php,在不同的 linux 服务器上使用 mysql

php - 如何将新的 paypal sdk 添加到 php 中已存在的另一个 paypal sdk 的文件 autoload.php