浮点数的精度问题。建议你复习一下相关知识
$temp = 800 * 2.05;
printf('%.14f', $temp); //1639.99999999999977
$temp = intval($temp);
echo $temp; //1639
intval 是直接截尾(去掉小数部分)的,在你这种需要一定精度的场合使用是不合适的
要用有四舍五入功能的 round 才行

解决方案 »

  1.   

    为什么? 
    我的需求是相乘的结果我去掉小数点(实际拿计算器算出的结果,而不是用PHP运算的记过)
      

  2.   

    浮点数问题,原因版主已经说明了。
    对于有浮点数的运算,可以使用floatval
    $temp = 800 * 2.05;
    $temp = floatval($temp); // 1640
    echo $temp;
      

  3.   

    改成这样应该就可以符合你要求的。$temp = 800 * 2.056;
    $temp = (int)floatval($temp);
    echo $temp;
      

  4.   


     echo floor(4.3); // 4
    echo floor(9.999); // 9