使用以下代码:
<?php
$balance = (float)255744.12340511001247912645339965820312;
print_r($balance);
?>
在32位机器上我得到:
255744.12340511
在64位机器上我得到了。
255744.123405
我,(差不多),确定它与32位64位机器无关,而是在某处设置它。 我也不认为这是一个浮点问题,而是一个php舍入问题。
我希望我的精度达到16位小数。
我怎样才能达到这种精确度?
答案 0 :(得分:1)
只是回答我自己的问题以避免混淆,正如Amal Murali正确指出的那样,背景是:
ini文件中的:
; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 32
; When floats & doubles are serialized store serialize_precision significant
; digits after the floating point. The default value ensures that when floats
; are decoded with unserialize, the data will remain the same.
serialize_precision = 32
或直接在您的脚本中
ini_set('precision', 32);
ini_set( 'serialize_precision', 32 );
如果您有权访问配置,则可能会稍快一些。