为什么sprintf会给出星号而不是格式化的字符串?

时间:2013-08-03 01:55:45

标签: php printf

此代码:

    function atest(){
    $test = array(
        "StartDate" => "08/01/2013", 
        "StartTime" =>"08:00:00", 
        "DepartmentID" => "75275", 
        "# Contacts Offered" => "3", 
        "# Contacts Handled" => "4", 
        "Average Talk Time" => "491.250000", 
        "Average Delay" => "5.666667", 
        "Percent SLA" => "1.333333");

    $formatted = sprintf("%s   %s TCSDATA %d %d %d %01.2f 0 %01.2f %01.2f 0\r\n", 
        $test["StartDate"],
        $test["StartTime"],
        $test['DepartmentID'],
        $test['# Contacts Offered'],
        $test['# Contacts Handled'],
        $test['Average Talk Time'],
        $test['Average Delay'],
        $test['Percent SLA']
    );

    echo('<pre>');
    echo( var_dump($test) );
    echo('</pre>');             

    echo $formatted;
}

打印出来:

08/01/2013 08:00:00 TCSDATA 75275 ************************

但是,如果我修改sprintf格式以删除最后的0:

"%s   %s TCSDATA %d %d %d %01.2f 0 %01.2f %01.2f \r\n"

我明白了:

08/01/2013 08:00:00 TCSDATA 75275 3 4 491.25 0 5.67 1.33

世界上有什么?

2 个答案:

答案 0 :(得分:2)

这个问题实际上是因为数字序列与Luhn算法匹配,并且在我的PCI环境中被屏蔽了。我从测试中手动排除了文件,现在一切正常。

答案 1 :(得分:0)

即使PHP 5.3.20(cli)(内置:2012年12月20日06:20:32)也无法重现此错误,因此可能不需要升级到5.4。