浮点'错误'是php 64bit

时间:2014-10-25 06:02:24

标签: php rounding

使用以下代码:

<?php
  $balance = (float)255744.12340511001247912645339965820312;
  print_r($balance);
?>

在32位机器上我得到:

255744.12340511

在64位机器上我得到了。

255744.123405

我,(差不多),确定它与32位64位机器无关,而是在某处设置它。 我也不认为这是一个浮点问题,而是一个php舍入问题。

我希望我的精度达到16位小数。

我怎样才能达到这种精确度?

1 个答案:

答案 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 );

如果您有权访问配置,则可能会稍快一些。