Perl数字与字符串间的自动转换

2017-08-07 19:22:25来源:CSDN作者:qq_25533359人点击

分享

最近遇到了一个关于数字转换中文字符串的问题,以前都是用的字符串替换,觉得太蠢了而且很费时间,所以决定重新写一个。
代码如下:

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”这个数字比较特殊,单独进行转换。
这段代码利用了递归的方式进行处理字符串。更加的方便快捷,其实可以继续增加数量级,但是由于我只需要用到“万”,就没有继续往下写。
有兴致的童鞋可以继续往下写哦~

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台