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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值