看来这里没有人关心此类问题呀...

解决方案 »

  1.   

    在首册里说得明白,格式化的时候是直接截取的,不过你取得情况已经很全,看来应该是函数内部算法的问题,不清楚了
      

  2.   

    今天在 UNIX 平台上测试了一下,结果却是这样的,函数 number_format() 的测试结果与
    windows2000平台的测试结果不同,函数 sprintf() 的测试结果与windows2000平台的测试
    结果相同.<?php//函数 number_format() 的测试
    echo number_format(0.885,2,'.','')."<br />";       // 0.89     ok!(UNIX)
    echo number_format(0.895,2,'.','')."<br />";       // 0.90     ok!(UNIX)
    echo number_format(0.985,2,'.','')."<br />";       // 0.98     error!(UNIX)
    echo number_format(0.995,2,'.','')."<br />";       // 0.99     error!(UNIX)
    echo number_format(0.885001,2,'.','')."<br />";    // 0.89     ok!
    echo number_format(0.895001,2,'.','')."<br />";    // 0.90     ok!
    echo number_format(0.985001,2,'.','')."<br />";    // 0.99     ok!
    echo number_format(0.995001,2,'.','')."<br />";    // 1.00     ok!
    echo number_format(0.9885,3,'.','')."<br />";      // 0.989    ok!(UNIX)
    echo number_format(0.9895,3,'.','')."<br />";      // 0.990    ok!(UNIX)
    echo number_format(0.988501,3,'.','')."<br />";    // 0.989    ok!
    echo number_format(0.989501,3,'.','')."<br />";    // 0.990    ok!
    echo number_format(0.99895,4,'.','')."<br />";     // 0.9990   ok!(UNIX)
    echo number_format(0.99985,4,'.','')."<br />";     // 0.9999   ok!(UNIX)
    echo number_format(0.99995,4,'.','')."<br />";     // 1.0000   ok!(UNIX)
    echo number_format(0.9989501,4,'.','')."<br />";   // 0.9990   ok!
    echo number_format(0.9998501,4,'.','')."<br />";   // 0.9999   ok!
    echo number_format(0.9999501,4,'.','')."<br />";   // 1.0000   ok!
    echo number_format(0.9999885,6,'.','')."<br />";   // 0.999988 error!(UNIX)
    echo number_format(0.999988501,6,'.','')."<br />"; // 0.999989 ok!//函数 sprintf() 的测试
    echo sprintf("%01.2f",0.885)."<br />";             // 0.88     error!(UNIX)
    echo sprintf("%01.2f",0.895)."<br />";             // 0.89     error!(UNIX)
    echo sprintf("%01.2f",0.985)."<br />";             // 0.98     error!(UNIX)
    echo sprintf("%01.2f",0.995)."<br />";             // 0.99     error!(UNIX)
    echo sprintf("%01.2f",0.885001)."<br />";          // 0.89     ok!
    echo sprintf("%01.2f",0.895001)."<br />";          // 0.90     ok!
    echo sprintf("%01.2f",0.985001)."<br />";          // 0.99     ok!
    echo sprintf("%01.2f",0.995001)."<br />";          // 1.00     ok!
    echo sprintf("%01.3f",0.9885)."<br />";            // 0.988    error!(UNIX)
    echo sprintf("%01.3f",0.9895)."<br />";            // 0.989    error!(UNIX)
    echo sprintf("%01.3f",0.988501)."<br />";          // 0.989    ok!
    echo sprintf("%01.3f",0.989501)."<br />";          // 0.990    ok!
    echo sprintf("%01.4f",0.99895)."<br />";           // 0.9989   error!(UNIX)
    echo sprintf("%01.4f",0.99985)."<br />";           // 0.9998   error!(UNIX)
    echo sprintf("%01.4f",0.99995)."<br />";           // 0.9999   error!(UNIX)
    echo sprintf("%01.4f",0.9989501)."<br />";         // 0.9990   ok!
    echo sprintf("%01.4f",0.9998501)."<br />";         // 0.9999   ok!
    echo sprintf("%01.4f",0.9999501)."<br />";         // 1.0000   ok!
    echo sprintf("%01.6f",0.9999885)."<br />";         // 0.999988 error!(UNIX)
    echo sprintf("%01.6f",0.999988501)."<br />";       // 0.999989 ok!
    ?>