日期:2011-11-19  浏览次数:20485 次

  你可能会觉得PHP中将浮点数(float)转成字符串非常简单, 但是, 常用的方法隐藏着严重的bug. 因为, PHP在处理浮点数时有非常不合理的做法, 会有精度丢失. 经研究, 其实是PHP在显示浮点数时的问题, 也可以说是BUG. PHP内置的echo, var_dump, json_encode, 字符串拼接等函数(指令)在显示浮点数时都有问题, 导致精度丢失.

  <?php

   $a = 1315537636.338467;

   printf("%f", $a); echo "\n";

   echo $a . "\n";

   echo $a; echo "\n";

  ?>

  结果

  1315537636.338467

  1315537636.3385

  1315537636.3385

  也就是说, 用PHP最顺手的方法将浮点数转成字符串或者显示是不行的, 必须使用printf/sprintf将浮点数转成字符串.