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.