2011-09-09

PHP浮点数显示和转成字符串

Views: 21127 | 2 Comments

你可能会觉得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将浮点数转成字符串.

Related posts:

  1. if-else对优化代码冗余度的反作用
  2. 后端开发工程师的DIV+CSS两栏布局入门
  3. PHP的continue 2
  4. WordPress分页代码
  5. 蛇形遍历数组
Posted by ideawu at 2011-09-09 11:33:47

2 Responses to "PHP浮点数显示和转成字符串"

  • $a 被赋值后,精度已经变了,所以才有后面的 echo 损失精度。所以说 printf 打印成字符串时精度也是损失的。

    你可将 1315537636.338467 改为 12633333.333333866 ,就是将小数点后面位数增加即可看到效果。 Reply
    @guest: 你关于精度损失的说法没错。不过,echo似乎做了“人性化”的小数位数取舍。另外,float的有效位数是7位二进制数,double是16位。 Reply

Leave a Comment