比如: 将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/