前端实现金额转大写(精确到分)

要求

将1000转为壹仟元

代码实现

       <el-form-item label="金额:" prop="amount">
          <el-input v-model="addTransferForm.amount" autocomplete="off" size="mini" />
          <span style="font-size: 11px;">金额:{{ toChineseNumbers(addTransferForm.amount) }}</span>
        </el-form-item>
 toChineseNumbers(n) {
      if (n>100000000000) {
        return"金额过大";
      }
      if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)){
        return "";  //判断数据是否大于0
      }

      var unit = "千百拾亿千百拾万千百拾元角分", str = "";
      n += "00";

      var indexpoint = n.indexOf('.');  // 如果是小数,截取小数点前面的位数

      if (indexpoint >= 0){

        n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2);   // 若为小数,截取需要使用的unit单位
      }

      unit = unit.substr(unit.length - n.length);  // 若为整数,截取需要使用的unit单位
      for (var i=0; i < n.length; i++){
        str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i);  //遍历转化为大写的数字
      }

      return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "整"); // 替换掉数字里面的零字符,得到结果
    }

效果图

 

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本题为开放性问题,有多种实现方式。以下是一种示例实现: ```c #include <stdio.h> #include <string.h> // 数字对应的大写汉字 const char *num2cn[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; // 单位对应的大写汉字 const char *unit[] = { "", "拾", "佰", "仟", "万" }; // 将整数部分换为大写汉字 void int2cn(unsigned int n, char *cn) { int i, j; int flag = 0; // 标记是否已经出现过非零数字 // 处理万位及以上 if (n >= 10000) { int2cn(n / 10000, cn); strcat(cn, "万"); n %= 10000; flag = 1; } // 处理千位及以下 for (i = 3; i >= 0; i--) { int d = n / (int)pow(10, i) % 10; if (d > 0) { strcat(cn, num2cn[d]); strcat(cn, unit[i]); flag = 1; } else if (flag && i == 0) { strcat(cn, "零"); } } // 处理零值 if (strlen(cn) == 0) { strcpy(cn, "零"); } } // 将小数部分换为大写汉字 void frac2cn(unsigned int n, char *cn) { if (n == 0) { strcat(cn, "整"); return; } int d = n / 10 % 10; // 取十位数字 if (d > 0) { strcat(cn, num2cn[d]); strcat(cn, "角"); } d = n % 10; // 取个位数字 if (d > 0) { strcat(cn, num2cn[d]); strcat(cn, "分"); } } // 将小写金额换为大写金额 void amount2cn(double amount, char *cn) { unsigned int int_part = (unsigned int)amount; // 整数部分 unsigned int frac_part = (unsigned int)((amount - int_part) * 100); // 小数部分 int2cn(int_part, cn); // 换整数部分 frac2cn(frac_part, cn); // 换小数部分 } int main() { double amount; char cn[100] = {0}; printf("请输入小写金额(不超过1000):"); scanf("%lf", &amount); if (amount < 0 || amount > 1000) { printf("输入金额超出范围!\n"); return 1; } amount2cn(amount, cn); printf("大写金额:%s\n", cn); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值