如何使用 'printf' 打印 '%' 字符?

10

一个我无法解决的简单问题...

如何在printf字符串中打印一个 '%' 字符?下面的代码可以打印,但会同时出现“无效转换”的错误。

printf "\t\t".$hour."00 HRS\t=>\t%.2f\t%.2f\t%.1f\%\n", $total, $max15, ($max15/$total*100);

应该输出类似以下内容:
        0000 HRS    =>    3125.19    898.02    28.7%
6个回答

26

根据 printf 的文档,应该使用 %% 而不是 \%。


2
“man printf” 真的能告诉你关于你系统上的 Perl 函数吗?在我的系统上,它只是关于命令行程序的。我可以使用 “man 3 printf” 获取 C 函数;如果我想阅读有关 Perl 函数的信息,我会使用 “perldoc -f printf”。 - Rob Kennedy
至少看起来我们都同意这个答案。 - mirod
@Rob Kennedy: "perldoc -f printf" 没有给我任何详细信息,而是引用了 sprintf。"perldoc -f sprintf" 确实给了我所有我需要的细节,就像 "man printf" 一样。然而,"man 3 printf" 给了我一个 OCaml 库的 man 页面。这是在最近的 kUbuntu 上(显然安装了 OCaml!)。 - mirod

5

请使用 %% 代替 \% :)


5

%% 代表单个百分号


3

回想起来,有一种简单的替代方法可以达到同样的效果。

将“%”符号作为字符串打印:

printf "\t\t".$hour."00 HRS\t=>\t%.2f\t%.2f\t%.1f%s\n", $total, $max15, ($max15/$total*100), "%";

2

使用%%来打印一个%符号。

printf "\t\t".$hour."00 HRS\t=>\t%.2f\t%.2f\t%.1f%%\n", $total, $max15, ($max15/$total*100);

1

这有点棘手,因为 printf 模板的文档实际上在 sprintf 的文档中。你必须抓住段落中间的那一行才知道要去那里查看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接