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

标签 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

这到底是怎么回事?

最佳答案

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

关于php - 为什么 sprintf 给出星号而不是我的格式化字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028502/

相关文章:

php - 在不使用类的情况下返回具有 __toString 功能的对象

c 使用 va_list 打印参数列表

c - 当 size_t 溢出时, "<"和 ">"运算符是否正常工作?

c++ - printf ("%s")、printf ("%ls")、wprintf ("%s") 和 wprintf ("%ls") 之间有什么区别?

php - 通过请求安全 token 自动登录

php - mysql 在 foreach 循环中插入,cron 不工作

php - Javascript。嵌入还是链接?

带有插入日期的 php/Mysql 查询失败

bash - 是否可以使用 BASH/bc/printf 将 float 舍入到其第一个有效数字?

bash - 使用 bash printf 减少小数位数而不四舍五入