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 }
