Perl 转换数字到人民币金额
2007-02-08
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#!/usr/bin/perl -w # # Xueron Nee Blog:http://www.xueron.com/ # # PHP版本作者 cyman20 Blog:http://blog.csdn.net/cyman20/ # use strict; my $num = 123308840; print "num: $numn"; print num2rmb($num) . "n"; sub num2rmb { my $num = shift or return ''; my @c1 = qw/零 壹 贰 叁 肆 伍 陆 柒 捌 玖/; my @c2 = qw/分 角 元 拾 佰 仟 万 拾 佰 仟 亿/; $num = 100 * (sprintf "%.2f", $num); return '' if length($num) > 12; print "dbg: $numn"; my $i = 0; my $c = ''; while (1) { my $n; if ($i == 0) { $n = substr $num, -1; } else { $n = $num % 10; } my $p1 = $c1[$n]; my $p2 = $c2[$i]; if ($n ne '0' || ($n eq '0' && ($p2 eq '亿' || $p2 eq '万' || $p2 eq '元'))) { $c = $p1 . $p2 . $c; } else { $c = $p1 . $c; } $i ++; $num = sprintf "%d", $num / 10; if ($num == 0) { last; } } print "dbg: before: $cn"; # 去掉多余的'零', UTF-8 版本的汉字字符长是3, GB2312汉字字符长是2 my $j = 0; my $slen = length($c); while ($j < $slen) { my $m = substr($c, $j, 6); # UTF-8 print "dbg: temp = $mn"; if ($m eq '零元' || $m eq '零万' || $m eq '零亿' || $m eq '零零') { my $left = substr($c, 0, $j); my $right = substr($c, $j + 3); # UTF-8 $c = $left . $right; $j -= 3; # UTF-8 $slen -= 3; # UTF-8 } $j += 3; # UTF-8 } # 去掉最后的'零', UTF-8 版本的汉字字符长是3, GB2312汉字字符长是2 if (substr($c, -3) eq '零') { # UTF-8 $c = substr($c, 0, -3); # UTF-8 } print "dbg: result: $c" . "整n"; return $c . "整"; } |
发表评论