关于书中第58页对于sprintf()函数的部分描述有错
时间:2007-12-16
来源:互联网
引用:
<?php$money = 1.4;
$formatted = sprintf("%-02.2f", $money);
echo $formatted;
?>
实际上关于这个函数的宽度部分的描述是错误的
书中说%号后0代表填充空格,2代表字符宽度,这句话没有错.
但是输出结果是错的,并且有明显的误导
书中这样描述的: 加上-号后,$formatted 将不会再是01.40 而是1.400(根据作者的勘误表此处应该是1.40)
很明显这是告诉我们2的代表字符宽度的含义仅仅是包含整数部分,从逻辑上来说前面表示整数宽度,后面的2f表示了小数部分的宽度也很合情合理.但实际上%号后面的2表示的是所有字符的宽度(小数点占一个位置)
也就是说
1.4的宽度是3
1.400的宽度是5
001.40的宽度是6
所以上面的程序的结果只可能是1.4,因为1.4本身的宽度已经有3了,超过了2.
所以想要程序输出01.40的效果 就要把代码改成
sprintf("%05.2f", $money);
另外节约各位的时间
sprintf("%-05.2f", $money);
输出结果为 1.400
两者一比较你应该很清楚所谓的左对齐和右对齐的不同了.
我所说一切均在我的机器上调试正确.我的PHP版本是5.20在win xp下
我说出来
一是解决其他人同样的困惑,我知道这种小问题经常能浪费自己很多时间
二是看看是否这个问题的出现是版本原因,因为很难想像作者勘误改过后还是错的....
************************************************************
另外我发现一个问题网上有的人举例子的水平连幼儿园都不到,比如:
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"
都是产生3.142这种例子举出来有屁用
作者: kuangfu 发布时间: 2007-12-16
补充:虽然看上去都是3.142 但是实际上是有区别的,你在这些%后多追加一个0就看出效果了(空格用0填充).当然我并不知道为什么这三个例子里面要多加一个s, 加上打印出来的结果是s.不加才能出现正确结果
作者: kuangfu 发布时间: 2007-12-16

也是给弄的一头水...
用心看这本书,发现错误还是有的...而有的错误还是小白的...
作者: hiro 发布时间: 2007-12-16
很细心,有的已经在勘误中。
感谢这样的读者。
[ 本帖最后由 phpcast 于 2007-12-16 19:18 编辑 ]
感谢这样的读者。
[ 本帖最后由 phpcast 于 2007-12-16 19:18 编辑 ]
作者: phpcast 发布时间: 2007-12-16
对啊,阿杜的说法基本上就是错误的!

作者: riechie 发布时间: 2008-01-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28