这段代码:
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/