ACapital.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. ;(function (s) {
  2. //参数
  3. var NumtoEnglish = {},
  4. n = '',
  5. xiao = '',
  6. zheng = '',
  7. regxinteger = /^([0-9]{1,}([.][0-9]*)?)$/
  8. //数字英文写法
  9. NumtoEnglish.tally = {
  10. arr1: ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'],
  11. arr2: ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'],
  12. arr3: ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'],
  13. arr4: ['hundred', 'thousand', 'million', 'billion', 'trillion', 'quadrillion'],
  14. }
  15. //转换整数部分
  16. NumtoEnglish.Convert_integer = function (n) {
  17. try {
  18. var fenge = this.toThousands(n).split(',')
  19. var result = ''
  20. for (var i = 0; i < fenge.length; i++) {
  21. if (fenge[i].length == 3) {
  22. result += this.tally.arr1[fenge[i].substring(0, 1)] + ' ' //百位
  23. result += this.tally.arr4[0]
  24. if (this.doubledight(fenge[i].substring(1)) != '') {
  25. result += ' and ' + this.doubledight(fenge[i].substring(1))
  26. }
  27. } else if (fenge[i].length == 2) {
  28. result += this.doubledight(fenge[i]) //十位
  29. } else if (fenge[i].length == 1) {
  30. result += this.tally.arr1[fenge[i]] //个位
  31. }
  32. //添加千分位单位(数字超过1000,每三位数字分配一个单位)
  33. if (i < fenge.length - 1) {
  34. result += ' ' + this.tally.arr4[fenge.length - 1 - i] + ' '
  35. }
  36. }
  37. return result
  38. } catch (ex) {
  39. console.error(ex)
  40. }
  41. }
  42. //转换小数部分
  43. NumtoEnglish.Convert_decimal = function (n) {
  44. var d = n.split('')
  45. var result = ''
  46. if (d.length > 0) {
  47. for (let i = 0; i < d.length; i++) {
  48. result += this.Convert_integer(d[i]) + ' '
  49. }
  50. //d.forEach(a => {
  51. // result += this.Convert_integer(a) + " ";
  52. //});
  53. }
  54. return result
  55. }
  56. //组合两位数
  57. NumtoEnglish.doubledight = function (n) {
  58. var result = ''
  59. if (parseInt(n) != 0) {
  60. var dd = n.split('')
  61. if (dd[0] < 1) {
  62. result = this.tally.arr1[dd[1]]
  63. } else if (dd[0] == 1) {
  64. result = this.tally.arr2[dd[1]]
  65. } else {
  66. if (this.tally.arr1[dd[1]] !== 'zero') {
  67. result = this.tally.arr3[dd[0] - 2] + '-' + this.tally.arr1[dd[1]]
  68. } else {
  69. result = this.tally.arr3[dd[0] - 2]
  70. }
  71. }
  72. }
  73. return result
  74. }
  75. //转换千分位显示,例:1000000 = 1,000,000
  76. NumtoEnglish.toThousands = function (num) {
  77. var num = (num || 0).toString(),
  78. result = ''
  79. while (num.length > 3) {
  80. result = ',' + num.slice(-3) + result
  81. num = num.slice(0, num.length - 3)
  82. }
  83. if (num) {
  84. result = num + result
  85. }
  86. return result
  87. }
  88. //扩展String方法
  89. s.prototype.toEnglish = function () {
  90. n = this
  91. if (!regxinteger.test(parseInt(n))) {
  92. return 'Error:Must in digital format'
  93. }
  94. //分割整数和小数(如果有小数的话)
  95. var NumList = n.toString().split('.'),
  96. zheng = NumtoEnglish.Convert_integer(NumList[0]) //整数部分
  97. //如果分割长度是2,说明是小数
  98. if (NumList.length == 2) {
  99. if (NumList[1].length <= 2) {
  100. xiao = NumtoEnglish.Convert_decimal(NumList[1])
  101. } else {
  102. //如果小数超过2位,不转换,返回原数据
  103. return n
  104. }
  105. }
  106. //返回转换结果
  107. return zheng + (xiao == '' ? '' : ' point ' + xiao)
  108. }
  109. })(String)