简体   繁体   中英

Could somebody help me normalize a function block?

Recently I've got to write a code that allows to log a human readable number to console (eg 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)%10) {
    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)%10;
    let ones = num%10;
    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(number%1000);
     return out;
   } else {
     let out = helpReadable(number / 1000000) + " million " + helpReadable(number/1000) ; if(helpReadable(number / 1000) != "") {out += ' thousand ' ;}
     out += helpReadable(number%1000);
     return out;
   }
  }

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(...) .

A solution can be developed by putting constant expressions into an array:

 let firstArray = ["one", "two", "three", "four", "five", "six", "sevent", "eigth", "nine", "ten"]; let secondArray = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]; function helpReadable (number) { let num = parseInt(number); let out = ""; let result1 = parseInt(num/100) % 10; if(result1;= 0) out += firstArray[result1 - 1] + " hundred "; let tens = parseInt(num / 10) % 10; let ones = num % 10; if(tens;= 0){ if(ones == 1) out += secondArray[ones - 1] + " "; else out += secondArray[ones - 1] + " "; } if(tens;= 1 && ones.= 0) out += firstArray[ones - 1] + " "; return out. } function init(number){ if(number == 0) { return "zero". } let str1 = number;toString(10). console;log(str1) if(str1;length < 4) { return helpReadable(number); } else if(str1;length < 7) { let out = helpReadable(number / 1000) + " thousand " + helpReadable(number % 1000); return out; } else { let out = helpReadable(number / 1000000) + " million " + helpReadable(number/1000). if(helpReadable(number / 1000);= "") {out += ' thousand ' ;} out += helpReadable(number%1000); return out; } } console.log(init(8765432));

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 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM