utils.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. export const numberToChinese = num => { //数字转汉字方法
  2. const chnNumChar = ["零","一","二","三","四","五","六","七","八","九"];
  3. const chnUnitSection = ["","万","亿","万亿","亿亿"];
  4. const chnUnitChar = ["","十","百","千"];
  5. const numToChn = num => {
  6. const index = num.toString().indexOf(".");
  7. if(index != -1){
  8. const str = num.toString().slice(index);
  9. let a = "点";
  10. for (let i = 1;i < str.length; i ++){
  11. a += chnNumChar[parseInt(str[i])];
  12. }
  13. return a ;
  14. }else{
  15. return '';
  16. }
  17. }
  18. //定义在每个小节的内部进行转化的方法,其他部分则与小节内部转化方法相同
  19. const sectionToChinese = section => {
  20. var str = '', chnstr = '',zero= false,count=0; //zero为是否进行补零, 第一次进行取余由于为个位数,默认不补零
  21. while(section>0){
  22. var v = section % 10; //对数字取余10,得到的数即为个位数
  23. if(v ==0){ //如果数字为零,则对字符串进行补零
  24. if(zero){
  25. zero = false; //如果遇到连续多次取余都是0,那么只需补一个零即可
  26. chnstr = chnNumChar[v] + chnstr;
  27. }
  28. }else{
  29. zero = true; //第一次取余之后,如果再次取余为零,则需要补零
  30. str = chnNumChar[v];
  31. str += chnUnitChar[count];
  32. chnstr = str + chnstr;
  33. }
  34. count++;
  35. section = Math.floor(section/10);
  36. }
  37. return chnstr;
  38. }
  39. const a = numToChn(num);
  40. num = Math.floor(num);
  41. let unitPos = 0;
  42. let strIns = '';
  43. let chnStr = '';
  44. let needZero = false;
  45. if(num === 0){
  46. return chnNumChar[0];
  47. }
  48. while(num > 0){
  49. let section = num % 10000;
  50. if(needZero){
  51. chnStr = chnNumChar[0] + chnStr;
  52. }
  53. strIns = sectionToChinese(section);
  54. strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0];
  55. chnStr = strIns + chnStr;
  56. needZero = (section < 1000) && (section > 0);
  57. num = Math.floor(num / 10000);
  58. unitPos ++;
  59. }
  60. let result = chnStr + a;
  61. const temp = result.split('')
  62. if (temp[0] === '一' && temp[1] === '十') {
  63. temp.splice(0, 1)
  64. result= temp.join('')
  65. }
  66. return result ? result : ''
  67. }