我找到网上的列子,但是输出的内容跟要输出的内容不一样,比如
$a = "22323330223000009";    
//echo sprintf("%.0f", $a);    
 echo sprintf ("%06.2f", ($a)); 
输出结果竟然是22323330223000008。00如何输出才能保证正确呀

解决方案 »

  1.   

    主要是:ceil,floor,round,intval
    ceil — 进一法取整
    说明
    float ceil ( float value )
    返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
    例子 1. ceil() 例子
    <?php
    echo ceil(4.3);     // 5
    echo ceil(9.999);     // 10
    ?>
    floor — 舍去法取整
    说明
    float floor ( float value )
    返回不大于 value 的下一个整数,将 value 的小数部分舍去取整。floor() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
    例子 1. floor() 例子
    <?php
    echo floor(4.3);     // 4
    echo floor(9.999); // 9
    ?>
    round — 对浮点数进行四舍五入
    说明
    float round ( float val [, int precision] )
    返回将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)。
    例子 1. round() 例子
    <?php
    echo round(3.4);             // 3
    echo round(3.5);             // 4
    echo round(3.6);             // 4
    echo round(3.6, 0);         // 4
    echo round(1.95583, 2);     // 1.96
    echo round(1241757, -3); // 1242000
    echo round(5.045, 2);     // 5.05
    echo round(5.055, 2);     // 5.06
    ?>
    intval—对变数转成整数型态
    例子intval()
    <?php
    echo intval(4.3);    //4
    echo intval(4.6); // 4  
    ?>
      

  2.   

    echo  sprintf('%06d', 22222222);
      

  3.   


    $a = "22323330223000009";  $dc = 6;//整数位数
    $dt = 2;//小数位数
    $d = intval(strlen($a)-$dc);
    $str = "1e$d";
    $t = eval("return $str;");
    $format = "%0${dc}.${dt}f";
    echo sprintf ($format, $a/$t);  
    /**
    223233.30 
    */
      

  4.   

    $str = '12345678901234567890123456789012345678901234567891230'; echo bcadd($str,'1');
    输出: 12345678901234567890123456789012345678901234567891230
      

  5.   

    在 PHP 里,“整数”长到一定程度,就被理解成“浮点数”,而浮点数也是有精度范围的,一般就 16、17 位有效数字。你这个貌似超过精度范围了。建议楼主考虑用字符串形式来进行相关处理,如果一定要进行数学计算,就像楼上指出的,用 BC Math Functions。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)