pdo_sqlsrv驱动程序如何将float类型转换为字符串?

时间:2014-10-09 08:13:19

标签: php sql-server

我将一些表的列类型设置为float并将length设置为53,设置它的值为38.8, 当我使用sqlsrv驱动程序查询时,没关系,它的显示值是38.8。 但是,当我使用pdo_sqlsrv驱动程序进行查询时,它的显示值为38.799999999999997, 这是为什么?

1 个答案:

答案 0 :(得分:0)

转换为二进制时,十进制数38.8为periodic

100110.1100110011001100110011001100110011001100110011001100110011001100110
       ^^^^
       Repeats forever

因此,如果您选择常规数字格式(始终具有固定的存储大小),则无法将其精确存储在计算机中。

这并不重要:既然你已经建立了你只需要8位小数,那么在丢弃其余小数时你应该得到正确的值:

ini_set('precision', 30);
var_dump( 38.8, number_format(38.8, 8) );
float(38.7999999999999971578290569596)
string(11) "38.80000000"

但是,如果8 th 十进制对你来说实际上很重要,你应该将列类型切换为DECIMAL,它在内部将数字存储为字符串,从而保持精确的十进制表示。 / p>