123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- ;(function (s) {
- //参数
- var NumtoEnglish = {},
- n = '',
- xiao = '',
- zheng = '',
- regxinteger = /^([0-9]{1,}([.][0-9]*)?)$/
- //数字英文写法
- NumtoEnglish.tally = {
- arr1: ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'],
- arr2: ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'],
- arr3: ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'],
- arr4: ['hundred', 'thousand', 'million', 'billion', 'trillion', 'quadrillion'],
- }
- //转换整数部分
- NumtoEnglish.Convert_integer = function (n) {
- try {
- var fenge = this.toThousands(n).split(',')
- var result = ''
- for (var i = 0; i < fenge.length; i++) {
- if (fenge[i].length == 3) {
- result += this.tally.arr1[fenge[i].substring(0, 1)] + ' ' //百位
- result += this.tally.arr4[0]
- if (this.doubledight(fenge[i].substring(1)) != '') {
- result += ' and ' + this.doubledight(fenge[i].substring(1))
- }
- } else if (fenge[i].length == 2) {
- result += this.doubledight(fenge[i]) //十位
- } else if (fenge[i].length == 1) {
- result += this.tally.arr1[fenge[i]] //个位
- }
- //添加千分位单位(数字超过1000,每三位数字分配一个单位)
- if (i < fenge.length - 1) {
- result += ' ' + this.tally.arr4[fenge.length - 1 - i] + ' '
- }
- }
- return result
- } catch (ex) {
- console.error(ex)
- }
- }
- //转换小数部分
- NumtoEnglish.Convert_decimal = function (n) {
- var d = n.split('')
- var result = ''
- if (d.length > 0) {
- for (let i = 0; i < d.length; i++) {
- result += this.Convert_integer(d[i]) + ' '
- }
- //d.forEach(a => {
- // result += this.Convert_integer(a) + " ";
- //});
- }
- return result
- }
- //组合两位数
- NumtoEnglish.doubledight = function (n) {
- var result = ''
- if (parseInt(n) != 0) {
- var dd = n.split('')
- if (dd[0] < 1) {
- result = this.tally.arr1[dd[1]]
- } else if (dd[0] == 1) {
- result = this.tally.arr2[dd[1]]
- } else {
- if (this.tally.arr1[dd[1]] !== 'zero') {
- result = this.tally.arr3[dd[0] - 2] + '-' + this.tally.arr1[dd[1]]
- } else {
- result = this.tally.arr3[dd[0] - 2]
- }
- }
- }
- return result
- }
- //转换千分位显示,例:1000000 = 1,000,000
- NumtoEnglish.toThousands = function (num) {
- var num = (num || 0).toString(),
- result = ''
- while (num.length > 3) {
- result = ',' + num.slice(-3) + result
- num = num.slice(0, num.length - 3)
- }
- if (num) {
- result = num + result
- }
- return result
- }
- //扩展String方法
- s.prototype.toEnglish = function () {
- n = this
- if (!regxinteger.test(parseInt(n))) {
- return 'Error:Must in digital format'
- }
- //分割整数和小数(如果有小数的话)
- var NumList = n.toString().split('.'),
- zheng = NumtoEnglish.Convert_integer(NumList[0]) //整数部分
- //如果分割长度是2,说明是小数
- if (NumList.length == 2) {
- if (NumList[1].length <= 2) {
- xiao = NumtoEnglish.Convert_decimal(NumList[1])
- } else {
- //如果小数超过2位,不转换,返回原数据
- return n
- }
- }
- //返回转换结果
- return zheng + (xiao == '' ? '' : ' point ' + xiao)
- }
- })(String)
|