Home > Back-end >  Could somebody help me normalize a function block?
Could somebody help me normalize a function block?

Time:01-20

Recently I've got to write a code that allows to log a human readable number to console (e.g. seventy four, one hundred twelve...)

I should admit that everything worked out fine, but it's told that I need to remove unnecessary invisible spaces when nothing comes after tens, such as forty or seventy, or hundreds. Should return "two hundred" instead of "two hundred "

I know it's rather stupid cause it doesn't affect the way the input amount looks like but they say that I should fix it anyway. I count on your help so much and let me write down the code here :

function helpReadable (number) {
  let num = parseInt(number);
  let out = "";
  switch (parseInt(num / 100)) {
    case 0 : break; 
    case 1 : out  = "one hundred ";
    break;
    case 2 : out  = "two hundred "; 
    break;
    case 3 : out  = "three hundred ";
    break;
    case 4 : out  = "four hundred ";
    break;
    case 5 : out  = "five hundred ";  
    break;
    case 6 : out  = "six hundred ";
    break;
    case 7 : out  = "seven hundred ";
    break;
    case 8 : out  = "eight hundred ";
    break;
    case 9 : out  = "nine hundred ";
    break;
  }
    let tens = parseInt(num / 10);
    let ones = num;
    switch (tens) {
    case 0 : break; 
    case 1 : switch (ones) {
    case 0 : out  = "ten";
    break; 
    case 1 : out  = "eleven";
    break;
    case 2 : out  = "twelve"; 
    break;
    case 3 : out  = "thirteen";
    break;
    case 4 : out  = "fourteen";
    break;
    case 5 : out  = "fifteen";  
    break;
    case 6 : out  = "sixteen";
    break;
    case 7 : out  = "seventeen";
    break;
    case 8 : out  = "eighteen";
    break;
    case 9 : out  = "nineteen";
    break;
    }
    break;
    case 2 : out  = "twenty "; 
    break;
    case 3 : out  = "thirty ";
    break;
    case 4 : out  = "forty ";
    break;
    case 5 : out  = "fifty ";  
    break;
    case 6 : out  = "sixty ";
    break;
    case 7 : out  = "seventy ";
    break;
    case 8 : out  = "eighty ";
    break;
    case 9 : out  = "ninety ";
    break;
    }
    if(tens != 1) {
      switch (ones) {
    case 0 : break;
    case 1 : out  = "one";
    break;
    case 2 : out  = "two"; 
    break;
    case 3 : out  = "three";
    break;
    case 4 : out  = "four";
    break;
    case 5 : out  = "five";  
    break;
    case 6 : out  = "six";
    break;
    case 7 : out  = "seven";
    break;
    case 8 : out  = "eight";
    break;
    case 9 : out  = "nine";
    break;
    }
    }
  
  return out;
}

module.exports = function toReadable (number) {
  if(number == 0) {
    return "zero";
  }
  let str1 = number.toString(10);
  if(str1.length < 4) {
    return helpReadable(number);
   } else if(str1.length < 7) {
     let out = helpReadable(number / 1000)   " thousand "   helpReadable(number00);
     return out;
   } else {
     let out = helpReadable(number / 1000000)   " million "   helpReadable(number/1000) ; if(helpReadable(number / 1000) != "") {out  = ' thousand ' ;}
     out  = helpReadable(number00);
     return out;
   }
  }

CodePudding user response:

Use trim() to remove spaces at the start and the end of the string. For example:

console.log(toReadable(1234).trim());

Or, if you have to do it inside the function, you can call trim() at every return out or return helpReadable(...).

CodePudding user response:

My way...

console.log( `--${toReadable( 2000000 )}--` )
console.log( `--${toReadable(  200000 )}--` )
console.log( `--${toReadable( 7000011 )}--` )
console.log( `--${toReadable(      23 )}--` )
console.log( `--${toReadable(       0 )}--` )


function toReadable(num)
  {
  const
    mParts = ['', 'thousand', 'million', 'billion' ]
  , arr    = []
  , numArr = []
  , numberStr =
      { '0': 'zero',  '10': 'ten',       '100': 'hundred'
      , '1': 'one',   '11': 'eleven'
      , '2': 'two',   '12': 'twelve',    '20' : 'twenty'
      , '3': 'three', '13': 'thirteen',  '30' : 'thirty'
      , '4': 'four',  '14': 'fourteen',  '40' : 'forty'
      , '5': 'five',  '15': 'fifteen',   '50' : 'fifty'
      , '6': 'six',   '16': 'sixteen',   '60' : 'sixty'
      , '7': 'seven', '17': 'seventeen', '70' : 'seventy'
      , '8': 'eight', '18': 'eighteen',  '80' : 'eighty'
      , '9': 'nine',  '19': 'nineteen',  '90' : 'ninety'
      }
  , digits3 = val =>
    {
    let
      vTen   = val % 100
    , valStr = val.toString(10)  
    , res    = []
      ;
    if (val > 100) res.push( numberStr[valStr[0]], numberStr[100] )
    
    if (val === 0) res.push( numberStr['0'] ) 
    else if (vTen < 20)  
      { if (vTen)  res.push( numberStr[vTen] ) }
    else 
      {
      let n = vTen % 10;
      vTen -= n;
      res.push( numberStr[vTen] )
      if (n>0) res.push( numberStr[n] )
      }
    return res.join(' ')
    }
  let n3d;
  do{
    n3d = num % 1000
    arr.push( n3d )
    num -= n3d
    num /= 1000
    }
    while(num > 0)

  for (let i=arr.length;i--;) 
    {
    if (i>0)
      {
      if (arr[i] > 0) numArr.push(digits3(arr[i]), mParts[i] )
      }
    else if (arr.length===1 || arr[i] > 0 ) 
      numArr.push( digits3(arr[i]) )
    }
  return numArr.join(' ') 
  }
.as-console-wrapper {max-height: 100%!important;top:0 }

  •  Tags:  
  • Related