我想使用MySQL中的DECIMAL(18,9)数字。在Laravel Eloquent中有一个十进制转换,它在内部与number_format函数一起工作,这样你就可以得到一个字符串,然后可以用于bcMath函数。我想知道为什么number_format函数会产生这样的错误?实际上,输入是用于浮点数的,但是对于这样一个大的数字,它通常只能使用5个小数位。
有没有一个安全的替代number_format的方法,可以使用任意数量的小数位作为输入?
$x = "123456789.123456789";
$y = number_format($x, 9, '.', '');
$z = (double)$x;
print $x . "\n";
print $y . "\n";
print $z . "\n";
Output (PHP 8.1.17):
123456789.123456789
123456789.123456791
123456789.12346
字符串
1条答案
按热度按时间baubqpgj1#
如果你想使用精确的十进制数,特别是在财务计算的背景下,最好使用像BCMath这样的库,它允许任意精度的算术。下面是一个使用BCMath的例子:
字符串
备注:确保在PHP配置中启用了bcmath扩展。如果没有启用,可以在php.ini文件中启用它,或者通过安装bcmath扩展。
型