我搜索过的常见问题并且仍在阅读中。
我有一个交易表,交易价格被宣布为浮动。我不能'使用小数,因为不同的股票价格不同。
如果通过phpMyAdmin查看表格,所有数字看起来都是正确的 - 因为它们已经插入,如下面的截图所示,价格(p)是0.709这是正确的。
但是当我使用常规zend框架从表中选择该交易时,我得到的价格是 0.70899999141693
如何制作与MyAdmin select相同的选择?并以正确的精度接收数字? 如果myAdmin完成了这项工作,那么在zend也可以,我是对的吗?
编辑:我无法使用ROUND
而我无法使用DECIMAL
因为我不知道正确的精确度。
例如Apple的价格精确度为2位小数,但VTB Bank的价格精确度为6位小数
EDIT2:以下是myAdmin和zend中相同选择的更多示例。
Trade 8838397是由价格0.01156。我已将它插入数据库中,这就是我在myAdmin中得到的内容:
如果我用php选择它,我会得到这个:
我认为,myAdmin不知何故猜测精度并且确实很好。如何???
答案 0 :(得分:1)
引用"我有一个交易表,交易价格被宣布为浮动。我不能'使用十进制,因为不同的股票在价格上有不同的精确度。"
我敢说这是胡说八道。如果您需要精确数据,请使用精确类型。如果值超出DECIMAL提供的范围,您将只使用float,这不是这里的情况。 DECIMAL(65,30)处理最多30个数字位置的值。对于你所有的价值观,这应该足够了,我想。
我想你在这里混合内部存储和数据显示。如果小数位数是所需信息,则存储此信息:
trade_id office price precision 12345678 123456 0,709 4
查询:
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。
答案 1 :(得分:0)
您可以使用round
功能:
select round(p, 3) as p from table_name;