Skip to content

[js] 第136天 用js实现小写金额转大写的方法 #1130

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第136天 用js实现小写金额转大写的方法
#1039

Activity

NicholasBaiYa

NicholasBaiYa commented on Aug 30, 2019

@NicholasBaiYa

小写金额转大写指的是?举个栗子: 1 -> 壹 ,这种吗?
这个貌似之前有过

haizhilin2013

haizhilin2013 commented on Aug 30, 2019

@haizhilin2013
CollaboratorAuthor

@NicholasBaiYa 对的!金额的规则多有些不一样,之前那个是纯数字的。类似

zhulidan

zhulidan commented on Aug 30, 2019

@zhulidan
   var price = "3452,132.567";
    console.log(changePrice(price))
    function changePrice(price) {
        var decimal = price.split(".");
        var nums = decimal[0].split(",")
        var resAry = [];
        var str = ''
        resAry.push(strChange(decimal[1], 0));
        for (var j = nums.length - 1, n = 0, k = 0; j >= 0; j-- , k += 3, n++) {
            resAry.unshift(strChange(nums[j], k + 3));
        }
        for (var i = 0; i < resAry.length; i++) {
            str += resAry[i]
        }
        return str
    }
    function strChange(ary, j) {
        var decimalAry = ['厘', '分', '角', '元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿']
        var numAry = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
        var str = []
        var str2 = ''
        if (j == 0) {
            for (var m = 0; m < ary.length; m++) {
                str2 += numAry[ary[m]] + decimalAry[2 - j++]
            }
        } else {

            for (var i = ary.length - 1, n = 0; i >= 0; i-- , n++) {
                var item = ary[i]
                str.unshift(numAry[item] + decimalAry[j++])
            }
            for (var m = 0; m < str.length; m++) {
                str2 += str[m]
            }
        }

        return str2
    }
Real102

Real102 commented on Nov 12, 2019

@Real102

@楼上,,需要处理下特殊情况,如带‘’0‘’的情况:30,021,32.567

ZindexYG

ZindexYG commented on Jan 14, 2020

@ZindexYG
function digitUppercase(price) {
  const fraction = ['角', '分'];
  const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  const unit = [
    ['元', '万', '亿'],
    ['', '拾', '佰', '仟'],
  ];
  let num = Math.abs(price);
  let s = '';
  fraction.forEach((item, index) => {
    s += (digit[Math.floor(num * 10 * (10 ** index)) % 10] + item).replace(/./, '');
  });
  s = s || '整';
  num = Math.floor(num);
  for (let i = 0; i < unit[0].length && num > 0; i += 1) {
    let p = '';
    for (let j = 0; j < unit[1].length && num > 0; j += 1) {
      p = digit[num % 10] + unit[1][j] + p;
      num = Math.floor(num / 10);
    }
    s = p.replace(/(.)*$/, '').replace(/^$/, '零') + unit[0][i] + s;
  }

  return s.replace(/(.)*/, '元').replace(/(.)+/g, '零').replace(/^$/, '零
xiaoqiangz

xiaoqiangz commented on Jul 13, 2022

@xiaoqiangz
function digitUppercase(price) {
  const fraction = ['角', '分'];
  const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  const unit = [
    ['元', '万', '亿'],
    ['', '拾', '佰', '仟'],
  ];
  let num = Math.abs(price);
  let s = '';
  fraction.forEach((item, index) => {
    s += (digit[Math.floor(num * 10 * (10 ** index)) % 10] + item).replace(/./, '');
  });
  s = s || '整';
  num = Math.floor(num);
  for (let i = 0; i < unit[0].length && num > 0; i += 1) {
    let p = '';
    for (let j = 0; j < unit[1].length && num > 0; j += 1) {
      p = digit[num % 10] + unit[1][j] + p;
      num = Math.floor(num / 10);
    }
    s = p.replace(/(.)*$/, '').replace(/^$/, '零') + unit[0][i] + s;
  }

  return s.replace(/(.)*/, '元').replace(/(.)+/g, '零').replace(/^$/, '零'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@xiaoqiangz@zhulidan@Real102@NicholasBaiYa

        Issue actions

          [js] 第136天 用js实现小写金额转大写的方法 · Issue #1130 · haizlin/fe-interview