• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

printf如何将数字输出为三位一撇?

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 27次 | 进入软件测试论坛讨论

领测软件测试网
比如: 将12345.67输出为  12,345.67

 绣林 回复于:2004-04-07 09:52:59
首先申明我不是作者,这是我收藏的,原作者我记不清了。

cu的朋友提的这个问题,我用bsh编了一个,可能用得着,比较哆嗦,盼高手有更好的办法.

输入一个数字串,即自动加小数点并加分节号;如:
123456789 得结果为:1,234,567.89
9000000  得结果为:90,000.00

#!/bin/sh 
# abc 

if [ `expr length $1` -le 2 ];then 
 echo "0"`echo "scale=2;$1/100"|bc` 
 exit 
fi 
a=`echo "scale=2;$1/100"|bc|cut -d"." -f1` 
b=`echo "scale=2;$1/100"|bc|cut -d"." -f2` 
g="" 
while [ `expr length $a` -gt 3 ];do 
 d=`echo "scale=3;$a/1000"|bc|cut -d"." -f1` 
 c=`echo "scale=3;$a/1000"|bc|cut -d"." -f2` 
 g="."$c$g 
 a=$d 
done 
echo `echo $a$g|sed 's/\./,/g'`"."$b 


使用方法:sh abc 测试数字 
sh abc 123456789  结果:1,234,567.89 
sh abc 900001000  结果:9,000,010,00 
sh abc 8000000     结果:80,000.00 
sh abc 12         结果:0.12

 li2002 回复于:2004-04-07 10:37:22
思路不错,但正负以及数字的合法性没有考虑

 looxb 回复于:2004-04-07 10:44:46
上面的shell有点不合理,应该考虑到字串中的小数点,效果应该象下面那样:
0------------------0.00
3------------------3.00
0.3----------------0.30
12345.6---------12,345.60

 c1l2d3 回复于:2004-04-07 10:56:50
稍做改动即可:
[code:1:6fd07b13de]#!/bin/sh
# programname: abc

#
if [ "$1" = "" ];then exit;fi
if [ "$1" = "0" ];then echo 0.00;exit;fi
if [ `expr substr $1 1 1` = "-" ];then
 int=`echo $1|sed 's/-//'`;f="-"
else 
 int=$1;f=""
fi
a=`echo $int|cut -d"." -f1`
b=`echo $int|sed 's/'$a'//'`
if [ "$b" = "" ];then b=".00";fi
g=""
while [ `expr length $a` -gt 3 ];do
  d=`echo "scale=3;$a/1000"|bc|cut -d"." -f1` 
  c=`echo "scale=3;$a/1000"|bc|cut -d"." -f2`
  g=","$c$g
  a=$d
done
echo $f$a$g$b[/code:1:6fd07b13de]

正负数都可以,但数字合法性需要另写判断了.

 yutian 回复于:2004-04-07 11:00:01
还不错,需要改进

楼主是不是问c里面的printf呀??

 萝卡 回复于:2004-04-07 21:16:33
http://bbs.chinaunix.net/forum/viewtopic.php?t=217867

 阿骁 回复于:2004-04-12 23:22:02
如果是 C 语言中的 printf 函数的话,不能直接实现的,需要自己写一个函数就可以实现的。这个函数也不是很难的丫!

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网