2016-12-06 28 views
0

我认为我已经看到了这个问题,但是经过2个小时的搜索后我找不到它。当我使用PDO从SQL中选择一个REAL数据类型时,数字发生了变化

我在我的数据库中的REAL数据类型,我存储的值0.00054

当我在SQL工作室选择它,我得到0.00054没有问题。

当我使用PDO在PHP中选中它,我得到0.00053999998

下面是从SQL工作室也:

select val_real, convert(decimal(38,18),val_real) from myTable 

结果:0.00054, 0.000539999979082490

从PHP使用PDO结果:

5.3999998E-4, .000539999979082490 

它看起来像PHP转换类型之前,我可以克等等。我正在拉我的头发。我怎样才能解决这个问题?

谢谢

+0

0.00053999998如果你问我,似乎很接近0.00054。 SQL实际上与您的PHP结果具有相同的值,所以这都是正常的。 –

+0

哈哈,是的,它非常接近,问题是这是一个用户输入的号码,它必须匹配他们输入的内容,而不是改变他们的号码。 –

+0

在这种情况下,请使用字符串或小数,而不是真实的。 –

回答

2

PHP不转换任何东西,也通过您的SQL查询证明:

select val_real, convert(decimal(38,18),val_real) from myTable 

result: 0.00054, 0.000539999979082490 

的问题是,价值0.00054不能使用真实准确地反映等你拿最接近它的值,即0.000539999979082490

阅读:http://floating-point-gui.de/了解更多信息。

如果您需要逐字地存储用户输入的数据,请使用字符串类型或小数点,如果您需要数字。

+0

为什么我可以在SQL Studio中看到0.00054而不是通过PHP PDO购买? SQL中的数据类型是REAL,为什么选择它时显示0.00054? –

+0

当我从SQL Studio中选择真正的数据类型时,它给出了0.00054如果真实无法正确表示它,它该怎么做? –

+0

你读过我给你的链接了吗?要将数据表示为'0.00054',您必须将其舍入,显然SQL Studio会为您执行此操作。 –

相关问题