PHP浮点数要注意的问题

作者: 我不是鱼 (2009-09-28 22:06)分类: PHP   标签: 浮点数 转整

PHP代码
  1. <?php   
  2. $a = 8.45*100;   
  3. var_dump($a);   
  4. var_dump(intval($a));   
  5.   
  6. $a = 845*1.00;   
  7. var_dump($a);   
  8. var_dump(intval($a));   
  9. ?>   
  10.   


这段程序,我以为输入4个都是845。不过结果出乎意料。php 5.29输入的结果是

float(845)
int(844)
float(845)
int(845)

为什么两个都是845的浮点数,转整时一个事845一个是844?php手册上的说法是:
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。

不过仍然很费解

PHP代码
  1. <?php   
  2. var_dump(floor((0.1+0.7)*10));   
  3. var_dump(floor((0.1+0.6)*10));   
  4. ?>   


两个都是 float(7)。
所以遇到php浮点数,特别是要对两数相比较是要注意这个问题。

评论 (0) | 浏览 (5538)

前一篇: POST的原始数据获得方法
后一篇: PHP大整数输出成科学计数法问题


添加评论

昵称:


博主


« 2020年-12月 »
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2

分类


热门标签


最近留言


概要

  • 文章数量: 41
  • 分类数量: 9
  • 标签数量: 73
  • 评论数量: 159
  • 浏览次数: 3236501

友情链接