UNPKG

number-to-words-in-bengali

Version:

This is a javascript converter to convert number to Bengali words

213 lines (193 loc) 6.54 kB
const NEGATIVE = 'ঋণাত্মক'; const DECIMAL = ' দশমিক'; const ONE_HUNDRED = 100; const ONE_THOUSAND = 1000; const ONE_LAC = 100000; const ONE_CORE = 10000000; const ONE_BILLION = 1000000000; const ONE_TRILLION = 1000000000000; const ONE_QUADRILLION = 1000000000000000; const MAX = 9007199254740992; const MAX_SAFE_INTEGER = 9007199254740991; const number2WordMap = { 0: `শূন্য`, 1: `এক`, 2: `দুই`, 3: `তিন`, 4: `চার`, 5: `পাঁচ`, 6: `ছয়`, 7: `সাত`, 8: `আট`, 9: `নয়`, 10: `দশ`, 11: `এগারো`, 12: `বারো`, 13: `তেরো`, 14: `চৌদ্দ`, 15: `পনের`, 16: `ষোল`, 17: `সতের`, 18: `আঠার`, 19: `উনিশ`, 20: `বিশ`, 21: `একুশ`, 22: `বাইশ`, 23: `তেইশ`, 24: `চব্বিশ`, 25: `পঁচিশ`, 26: `ছাব্বিশ`, 27: `সাতাশ`, 28: `আটাশ`, 29: `ঊনত্রিশ`, 30: `ত্রিশ`, 31: `একত্রিশ`, 32: `বত্রিশ`, 33: `তেত্রিশ`, 34: `চৌত্রিশ`, 35: `পঁয়ত্রিশ`, 36: `ছত্রিশ`, 37: `সাঁইত্রিশ`, 38: `আটত্রিশ`, 39: `ঊনচল্লিশ`, 40: `চল্লিশ`, 41: `একচল্লিশ`, 42: `বিয়াল্লিশ`, 43: `তেতাল্লিশ`, 44: `চুয়াল্লিশ`, 45: `পঁয়তাল্লিশ`, 46: `ছিচল্লিশ`, 47: `সাতচল্লিশ`, 48: `আটচল্লিশ`, 49: `ঊনপঞ্চাশ`, 50: `পঞ্চাশ`, 51: `একান্ন`, 52: `বাহান্ন`, 53: `তেপ্পান্ন`, 54: `চুয়ান্ন`, 55: `পঞ্চান্ন`, 56: `ছাপ্পান্ন`, 57: `সাতান্ন`, 58: `আটান্ন`, 59: `ঊনষাট`, 60: `ষাট`, 61: `একষট্টি`, 62: `বাষট্টি`, 63: `তেষট্টি`, 64: `চৌষট্টি`, 65: `পঁয়ষট্টি`, 66: `ছেষট্টি`, 67: `সাতষট্টি`, 68: `আটষট্টি`, 69: `উনসত্তুর`, 70: `সত্তর`, 71: `একাত্তর`, 72: `বাহাত্তর`, 73: `তেহাত্তুর`, 74: `চুয়াত্তর`, 75: `পঁচাত্তর`, 76: `ছিয়াত্তর`, 77: `সাতাত্তর`, 78: `আটাত্তর`, 79: `ঊনআশি`, 80: `আশি`, 81: `একাশি`, 82: `বিরাশি`, 83: `তিরাশি`, 84: `চুরাশি`, 85: `পঁচাশি`, 86: `ছিয়াশি`, 87: `সাতাশি`, 88: `আটাশি`, 89: `উননব্বই`, 90: `নব্বই`, 91: `একানব্বই`, 92: `বিরানব্বই`, 93: `তিরানব্বই`, 94: `চুরানব্বই`, 95: `পঁচানব্বই`, 96: `ছিয়ানব্বই`, 97: `সাতানব্বই`, 98: `আটানব্বই`, 99: `নিরানব্বই`, 100: `শত`, 1000: `হাজার`, 100000: `লক্ষ`, 10000000: `কোটি`, 1000000000: `বিলিয়ন`, 1000000000000: `ট্রিলিয়ন`, 1000000000000000: `কোয়াড্রিলিয়ন` }; exports.toBengaliWords = function(number) { let words; if (!isValidNumber(number)) { throw new TypeError( 'Not a finite number: ' + number + ' (' + typeof number + ')' ); } if (!isSafeNumber(number)) { throw new RangeError( 'Input is not a safe number, it’s either too large or too small.' ); } console.log(`Start converting ` + number + ` to Bengali words`); const num = parseInt(number, 10); words = generateWords(num); if(!isInt(number)){ const points = number.toString().split(`.`)[1]; words += DECIMAL; for(let point of points){ words += ' ' +number2WordMap[point]; } } return words; } function generateWords(number) { let remainder, word, words = arguments[1]; if(number === 0) { return !words ? number2WordMap[0] : words.join(' ').replace(/,$/, ''); } if (!words) { words = []; } if (number < 0) { words.push(NEGATIVE); number = Math.abs(number); } if (number < ONE_HUNDRED) { remainder = 0; word = number2WordMap[number]; } else if (number < ONE_THOUSAND) { remainder = number % ONE_HUNDRED; word = number2WordMap[Math.floor(number / ONE_HUNDRED)] + number2WordMap[ONE_HUNDRED]; } else if (number < ONE_LAC) { remainder = number % ONE_THOUSAND; word = number2WordMap[Math.floor(number / ONE_THOUSAND)] + ' ' + number2WordMap[ONE_THOUSAND]; } else if (number < ONE_CORE) { remainder = number % ONE_LAC; word = number2WordMap[Math.floor(number/ONE_LAC)] + ' ' + number2WordMap[ONE_LAC]; } else if (number < ONE_BILLION) { remainder = number % ONE_CORE; word = generateWords(Math.floor(number / ONE_CORE)) + ' ' + number2WordMap[ONE_CORE]; } else if (number < ONE_TRILLION) { remainder = number % ONE_BILLION; word = generateWords(Math.floor(number / ONE_BILLION)) + ' ' + number2WordMap[ONE_BILLION]; } else if (number < ONE_QUADRILLION) { remainder = number % ONE_TRILLION; word = generateWords(Math.floor(number / ONE_TRILLION)) + ' ' + number2WordMap[ONE_TRILLION]; } else if (number <= MAX) { remainder = number % ONE_QUADRILLION; word = generateWords(Math.floor(number / ONE_QUADRILLION)) + ' ' + number2WordMap[ONE_QUADRILLION] } words.push(word); return generateWords(remainder, words); } function isValidNumber(value) { return !(typeof value !== 'number' || Number.isNaN(value) || value === Infinity || value === -Infinity); } function isSafeNumber(value) { return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER; } function isInt(n) { return n % 1 === 0; }