MySQL大于等于不检查Double的精度

时间:2014-11-09 11:43:47

标签: php mysql bitcoin

我正在尝试为比特币水龙头创建广告平台,因此使用MySQL作为数据库。我在问题中提到比特币是有原因的,因为我认为我的问题与它有些联系。比特币考虑小数点后十八位小数。因此,来自某人的付款可以是0.01234567 BTC,这通常不会发生在正常的货币交易中。现在,在我的SQL语句中,我正在尝试检查广告客户是否已支付其广告空间的确切金额,从而更新订单以便成功。以下是我正在使用的声明......

UPDATE  order_table 
SET     status = 'success' 
WHERE   orderid = $orderid 
    AND amount <= $amount

金额字段已定义为DOUBLE。现在,当金额值为0.01 BTC时,当$ amount低于该金额时,订单不应成功。但是,当用户支付0.0099 BTC时,它会更新为成功!我已阅读以下解决方案,但它正在处理FLOAT ......

MySQL "greater than" condition sometimes returns row with equal value

我想知道同样的逻辑是否也适用于DOUBLE,我可以盲目地将DOUBLE数据类型转换为DECIMAL以解决问题吗?

修改:感谢评论中的Best data type to store money values in MySQL链接。我想知道,如果我可以使用比特币的Satoshi面额来解决问题。在这种情况下,查询将如下...

UPDATE  order_table 
SET     status = 'success' 
WHERE   orderid = $orderid 
    AND amount*100000000 <= $amount_in_satoshi

0 个答案:

没有答案