Perl数字与字符串间的自动转换
来源:互联网 发布:手机淘宝众筹在哪进入 编辑:程序博客网 时间:2024/05/18 17:59
最近遇到了一个关于 Perl数字与字符串间的自动转换的问题,以前都是用的字符串替换,觉得太蠢了而且很费时间,所以决定重新写一个。
代码如下:
use strict;use warnings;use Data::Dumper;use Encode;## 递归求结果sub reslutToCH{ my $input_CH = shift(); $input_CH = int($input_CH + 0.5); ## 四舍五入去整 my $string_CH = ""; ## 计算数字长度 my $numLenth = length($input_CH); ## 根据数字长度判断为何种位数的数字 if($numLenth eq 1){ ## 个 $string_CH .= numberGetCH($input_CH); return $string_CH; } elsif($numLenth eq 2){ ## 十 ## 判断是否为十 if(substr($input_CH, 0, 1) eq 1){ $string_CH .= "十"; }else{ ## 计算十位 $string_CH .= numberGetCH(int($input_CH / 10))."十"; } ## 取余数 $string_CH .= reslutToCH($input_CH % 10); } elsif($numLenth eq 3){ ## 百 $string_CH = numberGetCH(int($input_CH / 100))."百"; ## 如果余数长度小于2 并且余数不等于0 if(length($input_CH % 100) < 2 && ($input_CH % 100) > 0){ $string_CH .= "零"; } $string_CH .= reslutToCH(int($input_CH % 100)); } elsif($numLenth eq 4){ ## 千 $string_CH = numberGetCH(int($input_CH / 1000))."千"; ## 如果余数长度小于3 并且余数不等于0 if(length($input_CH % 1000) < 3 && ($input_CH % 1000) > 0){ $string_CH .= "零"; } $string_CH .= reslutToCH(int($input_CH % 1000)); } elsif($numLenth eq 5){ ## 万 $string_CH = numberGetCH(int($input_CH / 10000))."万"; ## 如果余数长度小于4 并且余数不等于0 if(length($input_CH % 10000) < 4 && ($input_CH % 10000) > 0){ $string_CH .= "零"; } $string_CH .= reslutToCH(int($input_CH % 10000)); } return $string_CH;}## 基础数字方法sub numberGetCH{ my $input = shift; my $resultString = ""; $input = int($input + 0.5); ## 四舍五入 if($input eq 1){ $resultString = "一"; }elsif($input eq 2){ $resultString = "二"; } elsif($input eq 3){ $resultString = "三"; } elsif($input eq 4){ $resultString = "四"; } elsif($input eq 5){ $resultString = "五"; } elsif($input eq 6){ $resultString = "六"; } elsif($input eq 7){ $resultString = "七"; } elsif($input eq 8){ $resultString = "八"; } elsif($input eq 9){ $resultString = "九"; } $resultString = encode('utf8', $resultString); $resultString = decode('utf8', $resultString); return $resultString;}
这里需要注意,当最后输入数字末尾未 “0”时,需要特殊处理,将末尾未“0”的给过滤掉,不然就会出现 10580=“一万零五百八零”的结果。
“0”这个数字比较特殊,单独进行转换。
这段代码利用了递归的方式进行处理字符串。更加的方便快捷,其实可以继续增加数量级,但是由于我只需要用到“万”,就没有继续往下写。
有兴致的童鞋可以继续往下写哦~
阅读全文
0 0
- Perl数字与字符串间的自动转换
- Perl数字与字符串间的自动转换
- 字符串与数字的转换
- perl 数字<->字符串及其进制间的转换
- javascript 数字字符串与数字的转换
- 字符串与数字转换
- 数字与字符串转换
- 字符串与数字转换
- java中数字与字符串类型间的转换
- C语言中字符串与数字间的转换
- C语言中字符串与数字间的转换
- 字符串与数字之间的互相转换
- 字符串与数字之间的互相转换
- 字符串与数字的相互转换
- C++数字与字符串之间的转换
- java:字符串与数字的转换
- 数字字符串与数的转换
- 字符串与数字之间的转换
- POJ
- http与https
- 欢迎来到我的博客
- 树状数组略解
- invokespecial和invokevirtual两种指令
- Perl数字与字符串间的自动转换
- 全局唯一ID的生成方式(2)
- Android studio配置progard工具生成混淆APK,并使用dex2jar、JD反编译查看效果
- 2017"百度之星"程序设计大赛-资格赛-1004-度度熊的午饭时光
- Androidstudio安装及配置二
- 常用的织梦调用时间标签
- MQ NameServer模块划分
- knn算法
- 【iOS控件】拖动的时间轴