UNPKG

persian-money-converter

Version:

تبدیل ساده و سبک مقادیر پولی ایرانی (ریال به تومان و برعکس). این پکیج به کاربران این امکان را می‌دهد که مقادیر عددی (تا سه رقم اعشاری) را از ریال به تومان و بالعکس تبدیل کنند. همچنین این پکیج مقادیر عددی را به حروف فارسی تبدیل می‌کند که برای کاربران فارسی

88 lines (87 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.numberToWords = numberToWords; exports.convertRialToToman = convertRialToToman; exports.convertTomanToRial = convertTomanToRial; const types_1 = require("./types"); function numberToWords(num) { let ArithmeticNumber = Math.floor(num); if (num === 0) return "صفر"; if (num < 0) return "عدد منفی نیست!"; let words = ""; let bigNumberIndex = 0; while (ArithmeticNumber > 0) { let part = ArithmeticNumber % 1000; if (part > 0) { words = convertThreeDigit(part) + (types_1.bigNumbers[bigNumberIndex] ? " " + types_1.bigNumbers[bigNumberIndex] : "") + " " + words; } ArithmeticNumber = Math.floor(ArithmeticNumber / 1000); bigNumberIndex++; } let decimalPart = parseInt((num - Math.floor(num)) .toFixed(3) .split(".")[1] .replace(/\.?0+$/, "")); if (decimalPart > 0) { return ((num < 1 ? "" : (words.slice(-3) === " و " ? words.slice(0, -3) : words.trim()) + " و ") + convertDecimalDigits(decimalPart)); } return words.slice(-3) === " و " ? words.slice(0, -3) : words.trim(); } function convertThreeDigit(ArithmeticNumber) { let word = ""; if (Math.floor(ArithmeticNumber / 100) > 0) { word += types_1.hundreds[Math.floor(ArithmeticNumber / 100)] + " "; ArithmeticNumber %= 100; } if (Math.floor(ArithmeticNumber / 10) > 1) { word += types_1.tens[Math.floor(ArithmeticNumber / 10)] + " "; ArithmeticNumber %= 10; } if (ArithmeticNumber > 0) { word += types_1.ones[ArithmeticNumber] + " "; } return word.slice(-3) === " و " ? word.slice(0, -3) : word.trim(); } function convertDecimalDigits(num) { let result = ""; const suffix = num.toString().length === 3 ? "هزارم" : num.toString().length === 2 ? "صدم" : num.toString().length === 1 ? "دهم" : ""; if (num >= 100) { result += types_1.decimalHundreds[Math.floor(num / 100)] + " "; num = num % 100; } if (num >= 10 && num < 20) { result += types_1.decimalTeens[num - 10] + " "; return result.trim(); } if (num >= 20) { result += types_1.decimalTens[Math.floor(num / 10)] + " "; num = num % 10; } if (num > 0) { result += types_1.decimalOnes[num] + " "; } return result + suffix; } function convertRialToToman(rial) { const toman = rial / 10; return { toNumber: toman.toLocaleString(), toChar: numberToWords(toman) }; } function convertTomanToRial(toman) { const rial = toman * 10; return { toNumber: rial.toLocaleString(), toChar: numberToWords(rial) }; }