美文网首页
Perl数字与字符串间的自动转换

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

作者: 4年了还是个菜比 | 来源:发表于2017-08-07 17:38 被阅读0次

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

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

相关文章

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

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

  • 语法专题---数据类型的转换

    强制转换Number():手动转为数字String():手动转为字符串Boolean():手动转为布尔值 自动转换...

  • 关于JavaScript的隐式转换

    一、 数字与数字之间的转换 1.字符串加数字,数字就会转成字符串。 2.数字减字符串,字符串转成数字。如果字符串不...

  • 隐式转换

    隐式转换结论 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

  • 数据类型的转换

    隐式转换结论 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

  • 第三天

    隐式转换结论 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

  • 2018-07-11

    隐式转换结论 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

  • ☝(•̀˓◞•́)哎呦

    隐式转换结论 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

  • ☝(•̀˓◞•́)哎呦

    隐式转换结论 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

  • 转换.运算符

    一、隐式转换 1、数字 + 字符串 :将数字转换为字符串 2、数字 + boolean :将 boolean 转换...

网友评论

      本文标题:Perl数字与字符串间的自动转换

      本文链接:https://www.haomeiwen.com/subject/zlmalxtx.html