Php 当我使用PDO从SQL中选择一个真实的数据类型时,这个数字会改变

Php 当我使用PDO从SQL中选择一个真实的数据类型时,这个数字会改变,php,sql-server,pdo,Php,Sql Server,Pdo,我以为我已经看到了这个地址,但在谷歌搜索了两个小时后我找不到了 我的数据库中有一个真实的数据类型,我存储了值0.00054 当我在SQL studio中选择它时,我得到0.00054没有问题 当我在php中使用pdo选择它时,得到0.0005399998 以下是来自SQL studio的: select val_real, convert(decimal(38,18),val_real) from myTable 结果:0.00054,0.0005399979082490 从PHP使用PDO结

我以为我已经看到了这个地址,但在谷歌搜索了两个小时后我找不到了

我的数据库中有一个真实的数据类型,我存储了值0.00054

当我在SQL studio中选择它时,我得到0.00054没有问题

当我在php中使用pdo选择它时,得到0.0005399998

以下是来自SQL studio的:

select val_real, convert(decimal(38,18),val_real) from myTable
结果:
0.00054,0.0005399979082490

从PHP使用PDO结果:

5.3999998E-4, .000539999979082490
看起来php正在转换类型,我还没来得及处理它。我在拔头发。我怎样才能解决这个问题


谢谢

PHP没有转换任何东西,您的SQL查询也证明了这一点:

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

result: 0.00054, 0.000539999979082490
问题在于,无法使用实数准确表示值
0.00054
,因此您会得到最接近它的值,即
0.0005399979082490

阅读以下内容:了解更多信息


如果需要逐字存储用户输入的数据,如果需要数字,请使用字符串类型或十进制。

PHP不会转换任何内容,SQL查询也证明了这一点:

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

result: 0.00054, 0.000539999979082490
问题在于,无法使用实数准确表示值
0.00054
,因此您会得到最接近它的值,即
0.0005399979082490

阅读以下内容:了解更多信息



如果需要逐字存储用户输入的数据,如果需要数字,请使用字符串类型或十进制。

0.0005399998如果你问我,似乎非常接近0.00054。SQL实际上与PHP结果的值相同,所以这是正常的。哈哈,是的,非常接近,问题是这是一个用户输入的数字,它必须匹配他们输入的数字,而不是更改他们的数字。在这种情况下,使用字符串或小数,而不是实数。问题是。。。你为什么要用真实的数据类型呢?你是对的。这将用于计算,但我可以在需要时在PHP中转换它。我忽略了最简单的解决办法。也许我喝了太多的咖啡。如果你问我的话,0.000539998看起来很接近0.00054。SQL实际上与PHP结果的值相同,所以这是正常的。哈哈,是的,非常接近,问题是这是一个用户输入的数字,它必须匹配他们输入的数字,而不是更改他们的数字。在这种情况下,使用字符串或小数,而不是实数。问题是。。。你为什么要用真实的数据类型呢?你是对的。这将用于计算,但我可以在需要时在PHP中转换它。我忽略了最简单的解决办法。也许我喝了太多咖啡为什么我可以在SQL studio中看到0.00054而不是通过PHP PDO购买?SQL中的数据类型是真实的,为什么我选择它时它会显示0.00054?当我从SQL Studio中选择真实的数据类型时,它会显示0.00054。如果真实的数据类型不能正确地表示它,它怎么能显示?你读过我给你的链接了吗?要将数据表示为
0.00054
,您必须对其进行四舍五入,显然是SQL Studio为您做的。我读过了,但SQL Studio如何知道要四舍五入到多少小数位?它如何知道我实际上不想存储0.0005399999它确实存储了
0.00053999999
,当您将它转换为
十进制(38,18)
时就证明了这一点。我不知道sqlstudio的默认舍入值,但可能只有5个数字。这与您的客户端输入相同,这完全是巧合。为什么我可以在SQL studio中看到0.00054而不是通过PHP PDO购买?SQL中的数据类型是真实的,为什么我选择它时它会显示0.00054?当我从SQL Studio中选择真实的数据类型时,它会显示0.00054。如果真实的数据类型不能正确地表示它,它怎么能显示?你读过我给你的链接了吗?要将数据表示为
0.00054
,您必须对其进行四舍五入,显然是SQL Studio为您做的。我读过了,但SQL Studio如何知道要四舍五入到多少小数位?它如何知道我实际上不想存储0.0005399999它确实存储了
0.00053999999
,当您将它转换为
十进制(38,18)
时就证明了这一点。我不知道sqlstudio的默认舍入值,但可能只有5个数字。这与客户端输入的内容相同,这纯粹是巧合。