Convert digits into words with JavaScript

后端 未结 27 1460
我寻月下人不归
我寻月下人不归 2020-11-22 15:08

I am making a code which converts the given amount into words, heres is what I have got after googling. But I think its a little lengthy code to achieve a simple task. Two R

27条回答
  •  萌比男神i
    2020-11-22 15:36

    I like the result I got here which i think is easy to read and short enough to fit as a solution.

    function NumInWords (number) {
      const first = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
      const tens = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
      const mad = ['', 'thousand', 'million', 'billion', 'trillion'];
      let word = '';
    
      for (let i = 0; i < mad.length; i++) {
        let tempNumber = number%(100*Math.pow(1000,i));
        if (Math.floor(tempNumber/Math.pow(1000,i)) !== 0) {
          if (Math.floor(tempNumber/Math.pow(1000,i)) < 20) {
            word = first[Math.floor(tempNumber/Math.pow(1000,i))] + mad[i] + ' ' + word;
          } else {
            word = tens[Math.floor(tempNumber/(10*Math.pow(1000,i)))] + '-' + first[Math.floor(tempNumber/Math.pow(1000,i))%10] + mad[i] + ' ' + word;
          }
        }
    
        tempNumber = number%(Math.pow(1000,i+1));
        if (Math.floor(tempNumber/(100*Math.pow(1000,i))) !== 0) word = first[Math.floor(tempNumber/(100*Math.pow(1000,i)))] + 'hunderd ' + word;
      }
        return word;
    }
    
    console.log(NumInWords(89754697976431))

    And the result is :

    eighty-nine trillion seven hundred fifty-four billion six hundred ninety-seven million nine hundred seventy-six thousand four hundred thirty-one

提交回复
热议问题