Ale*_*lex 4 php mysql floating-point precision decimal
正如通常所讨论的,(例如此处在 MySQL 中存储 0.00001)应将 DECIMAL 数据类型用于需要精度/正确性的字段,例如帐户余额。
然而,我想知道 PHP 如何处理这些值,如果它们在内部作为浮点数处理,从数据库读取这些值、进行一些计算并再次将它们写回时是否仍然存在问题。如果是这样,我们如何强制 PHP 保持精确?
该变量最初可能是 PHP 中的字符串(从 MySQL 结果对象读取时)。通常,不能依赖 PHP 的浮点数据类型来保持所需的精确十进制值。您应该使用像GMP这样的任意精度数学库。(当您获取结果对象的一行时,将DECIMAL列值传递给适当的构造函数,然后使用您正在使用的库提供的函数对其进行操作。)
更深入:假设您在数据库中的一DECIMAL(6, 4)列中存储了一个金额。你想把它提取到 PHP 中,用它做一些事情。您发出查询以获取该列。您将查询的第一行提取到关联数组中。假设该行的值为2.5674。您的数组现在类似于array('MyDecimal' => '2.5674')(数字显示为字符串)。您使用(据我所知)gmp_init()将该字符串转换为 GMP 资源。现在您可以使用其他 GMP 函数对该数字进行数学运算。如果要存储 GMP 编号,可以使用将其转换回字符串gmp_strval()(如果您使用的是可以处理 GMP 资源的数据库抽象层,则可能不必这样做)。