找回密码
 注册
查看: 9321|回复: 0

perl语言使用printf 格式化输出

[复制链接]
发表于 2011-11-13 22:57:58 | 显示全部楼层 |阅读模式
你可能需要对输出有比print 更多的控制。也许,你习惯了C 提供的格式化输出函数:printf,担心Perl 中没有提供相同的
名字,类似功能的的函数。
printf 函数有一个格式字符串(format string),后接需要输出的字符串列表。格式◆字符串,是一个模板,它规定输出的格式:
◆这里,我们按照一般意义来使用“format”。Perl 有报告生成(report-generating)的功能,称为“formats”。现在我们不打算讨论它。
printf “Hello, %s; your password expires in %d days!\n”,
$user, $days_to_die;
格式字符串中有一些被称作格式符(conversion)的东西;每一个格式符由百分号(%)开头,由字母结束。(很快我们将看到,
在这两个字符之间可以有其它字符)。后面元素个数和格式符的个数是一致的。如果不等,则不能正确执行。上述代码中后
面有2 个元素,有2 个格式符。因此输出类似于:
Hello, meryn; your password expires in 3 days!
printf 有许多的的格式符,此刻我们介绍最常用的。当然,详细的信息请参见perlfunc 的帮助手册。
要输出数字,通常使用%g◆,它将根据需要自动选用浮点数,整数,或者指数:
◆ “Geneal”numeric conversion(通用数字格式符) 或者是“Good conversion for this number”(关于这个数字的好的格式符)抑或“Guess
what I want the output to look like.”(猜猜我将怎样输出)
%d 为十进制◆整数,根据需要而截尾:
◆%x 是针对十六进制的,%o 是针对八进制的。
print “in %d days!\n”,17.85; #in 17 days!
上述结果被截尾了,而非变成和它最相近的整数;后面将讨论怎样变成最相近的整数。
在Perl 中,printf 中的数据通常会接受一个宽度值。如果数据不能满足这个宽度,则会自动扩展开来:
printf “%6f\n”, 42; #输出为○○○○42(○此处指代空格)
printf “%23\n”,2e3+1.95; #2001
%s 是针对字符串的,例如:
printf “%10s\n”, “wilma”; #输出为:○○○○○wilma
如果宽度值为负数,则为左对齐(对于所有的格式符):
print “%-15s\n”, “flintstone”; #输出为flintstone○○○○
%f 根据需要进行截尾,你可以设置需要几位小数点后面的数字:
printf “%12f\n”, 6*7 + 2/3; #输出为: ○○○42.666667
printf “%12.3f\n”, 6*7 + 2/3; #输出为: ○○○○○○42.667
printf “%12.0f\n”, 6*7 + 2/3; #输出为: ○○○○○○○○○○43
要输出一个百分号,可以使用%%,它不会使用后面列表中的元素◆:
◆你可能认为可以在百分号前使用反斜线(\)。你可以试试,但这是不正确的。它不能正确工作的理由是,格式是表达式,“\%”是指一个
字符的字符串‘%’。故虽然我们在格式字符串中使用了反斜线,printf 函数并不知道怎样处理它。C 程序员可以使用者这种方法来处理。
print “Monthly interest rate: %.2f%%\n”,
5.25/12; #输出的值为0.44%
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 20:40 , Processed in 0.022680 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表