我已经搜索和阅读但仍然卡住的常见问题。
我有一个包含交易的表格,其中交易价格被声明为 float 价格。我不能使用小数,因为不同的股票在价格上有不同的精度。
如果通过 phpMyAdmin 查看表格,所有数字看起来都是正确的 - 因为它们是插入的,正如您在下面的屏幕截图中看到的那样,价格 (p) 是 0.709,这是正确的。
但是当我使用常规 zend 框架从表中选择该交易时,我得到的价格是 0.70899999141693
如何进行与 MyAdmin select 相同的选择?并以正确的精度接收号码? 如果 myAdmin 完成这项工作,它也可以在 zend 中实现,对吗?
编辑:我不能使用 ROUND
也不能使用 DECIMAL
因为我不知道正确的精度。
例如Apple 的价格有 2 位小数,但 VTB 银行的价格有 6 位小数
EDIT2:这里有更多关于 myAdmin 和 zend 中相同选择的示例。
交易 8838397 的价格为 0.01156。我已将它插入数据库,这就是我在 myAdmin 中得到的:
如果我用 php 选择它,我得到这个:
我假设,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/