资讯专栏INFORMATION COLUMN

数字金额转写为中文大写

DirtyMind / 3006人阅读

摘要:零壹贰叁肆伍陆柒捌玖拾佰仟万拾佰仟亿拾佰仟万拾佰仟整数部分小数部分结果是否为你输入的数字过大当前位的数字当前位的数字对应的中文大写数字当前位的前一位数字当前位的前第二位数字当前位的第三位数字当前位的后第一位数字当前位的后第二位数字当前

function toCNcase(num) {
  num = String(num);
  var cn = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
  var position = ["", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"];
  // 整数部分
  var intPart = num.split(".")[0];
  // 小数部分
  var floatPart = num.split(".")[1];
  // 结果
  var result = "";
  // 是否为0
  var isZero = false;
  if(intPart.length > position.length){
    return "你输入的数字过大"
  }
  for (var index = 0; index < intPart.length; index++) {
    var num = intPart[index]; // 当前位的数字
    var numCN = cn[num]; // 当前位的数字对应的中文大写数字
    var numPreOne = intPart[index - 1]; // 当前位的前一位数字
    var numPreTwo = intPart[index - 2]; // 当前位的前第二位数字
    var numPreThree = intPart[index - 3]; // 当前位的第三位数字
    var numNextOne = intPart[index + 1] // 当前位的后第一位数字
    var numNextTwo = intPart[index + 2] // 当前位的后第二位数字
    var numNextThree = intPart[index + 3] // 当前位的后第三位数字
    var pos = position[intPart.length - index - 1] // 当前数字对应的单位
    if (num != 0) {
      // 当前位数字不为0,用大写数加单位
      result += numCN + pos;
    } else if ("亿" === pos || ("万" === pos && [numPreOne, numPreTwo, numPreThree].some(function (num) { return num !== "0" }))) {
      // 当前位数字为0,单位亿不能省略,单位万的前三位任意一位不为0,不能省略万
      result += pos;
    } else if ("仟" === pos && [numNextOne, numNextTwo, numNextThree].some(function (num) { return num !== "0" })) {
      // 当前数字是0,单位是含有仟,并且后四位不全部为0,补充一个零
      result += numCN;
    } else if ("佰" === pos && numPreOne !== "0" && [numNextOne, numNextTwo].some(function (num) { return num !== "0" })) {
      // 当前位数字为0,单位含有佰,并且当前位的前一位不为0,补充一个零
      result += numCN;
    } else if ("拾" === pos && numPreOne !== "0" && numNextOne !== "0") {
      // 当前位数字为0,单位含有拾,并且当前位的前一位不为0,补充一个零
      result += numCN;
    }
  }
  result += "圆"
  var floatPositon = ["角","分"];
  for (var index = 0; index < floatPart.length; index++) {
    var num = floatPart[index]; // 当前位的数字
    var numCN = cn[num]; // 当前位的数字对应的中文大写数字
    var pos = floatPositon[index] || "";
    if(num !== "0" && pos){
      result += numCN + pos ;
    }
  }
  return result;
}

使用方式:toCNcase(11002031022.0234);
结果:壹佰壹拾亿零贰佰零叁万壹仟零贰拾贰圆贰分

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99300.html

相关文章

  • 将人民币中金额数字转化中文大写

    摘要:将人民币中金额数字转化为中文大写壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆零壹贰叁肆伍陆柒捌玖圆角分拾佰仟万拾佰仟亿 1.将人民币中金额数字转化为中文大写 echo toChineseNumber(1234567890);//壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆 function toChineseNumber($money){ $money = round($money,2);...

    canopus4u 评论0 收藏0
  • 将人民币中金额数字转化中文大写

    摘要:壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆零壹贰叁肆伍陆柒捌玖圆角分拾佰仟万拾佰仟亿 phpecho toChineseNumber(1234567890);//壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆 function toChineseNumber($money){ $money = round($money,2); $cnynums = array(零,壹,贰,叁,肆,...

    MartinDai 评论0 收藏0
  • 数字中文读取出来

    摘要:数字转换成中文针对财务数据将金额数据转换成大写,在网上有很多例子,总感觉有更简单的方式实现,下面是具体的源码和探究。目前支持持位数,如果更大的数据可进行修正。 数字转换成中文 针对财务数据将金额数据转换成大写,在网上有很多例子,总感觉有更简单的方式实现,下面是具体的源码和探究。如果疑问,或更好的建议欢迎留言,共同学习。 源码 class NumToZh_cn { numLeve...

    chavesgu 评论0 收藏0
  • 语音识别框架最新进展——深度全序列卷积神经网络登场

    摘要:目前较好的语音识别系统采用双向长短时记忆网络,,这种网络能够对语音的长时相关性进行建模,从而提高识别正确率。因而科大讯飞使用深度全序列卷积神经网络来克服双向的缺陷。 人工智能的应用中,语音识别在今年来取得显著进步,不管是英文、中文或者其他语种,机器的语音识别准确率在不断上升。其中,语音听写技术的发展更为迅速,目前已广泛在语音输入、语音搜索、语音助手等产品中得到应用并日臻成熟。但是,语音应用的...

    explorer_ddf 评论0 收藏0

发表评论

0条评论

DirtyMind

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<