UNPKG

n2words

Version:

n2words converts a numerical number into a written one, supports 28 languages and has zero dependencies.

136 lines (124 loc) 3.16 kB
import { N2WordsRU } from './ru.js'; export class N2WordsCZ extends N2WordsRU { ones = { 1: 'jedna', 2: 'dva', 3: 'tři', 4: 'čtyři', 5: 'pět', 6: 'šest', 7: 'sedm', 8: 'osm', 9: 'devět' }; tens = { 0: 'deset', 1: 'jedenáct', 2: 'dvanáct', 3: 'třináct', 4: 'čtrnáct', 5: 'patnáct', 6: 'šestnáct', 7: 'sedmnáct', 8: 'osmnáct', 9: 'devatenáct' }; twenties = { 2: 'dvacet', 3: 'třicet', 4: 'čtyřicet', 5: 'padesát', 6: 'šedesát', 7: 'sedmdesát', 8: 'osmdesát', 9: 'devadesát' }; hundreds = { 1: 'sto', 2: 'dvě stě', 3: 'tři sta', 4: 'čtyři sta', 5: 'pět set', 6: 'šest set', 7: 'sedm set', 8: 'osm set', 9: 'devět set' }; thousands = { 1: ['tisíc', 'tisíce', 'tisíc'], // 10^ 3 2: ['milion', 'miliony', 'milionů'], // 10^ 6 3: ['miliarda', 'miliardy', 'miliard'], // 10^ 9 4: ['bilion', 'biliony', 'bilionů'], // 10^ 12 5: ['biliarda', 'biliardy', 'biliard'], // 10^ 15 6: ['trilion', 'triliony', 'trilionů'], // 10^ 18 7: ['triliarda', 'triliardy', 'triliard'], // 10^ 21 8: ['kvadrilion', 'kvadriliony', 'kvadrilionů'], // 10^ 24 9: ['kvadriliarda', 'kvadriliardy', 'kvadriliard'], // 10^ 27 10: ['quintillion', 'quintilliony', 'quintillionů'], // 10^ 30 }; constructor(options) { options = Object.assign({ negativeWord: 'mínus', zero: 'nula' }, options); super(options); } get separatorWord() { if (this.wholeNumber == 0n || this.wholeNumber == 1n) { return 'celá'; } else if (this.wholeNumber >= 2n && this.wholeNumber <= 4n) { return 'celé'; } else { return 'celých'; } } pluralize(n, forms) { let form = 2; if (n == 1) { form = 0; } else if (((n % 10n < 5n) && (n % 10n > 1n)) && (n % 100n < 10n || n % 100n > 20n)) { form = 1; } return forms[form]; } toCardinal(number) { if (number == 0) { return this.zero; } const words = []; const chunks = this.splitByX(number.toString(), 3); let index = chunks.length; for (const x of chunks) { index = index - 1; if (x == 0) { continue; } const [n1, n2, n3] = this.getDigits(x); if (n3 > 0) { words.push(this.hundreds[n3]); } if (n2 > 1) { words.push(this.twenties[n2]); } if (n2 == 1) { words.push(this.tens[n1]); } else if (n1 > 0 && !(index > 0 && x == 1)) { words.push(this.ones[n1]); } if (index > 0) { words.push(this.pluralize(x, this.thousands[index])); } } return words.join(' '); } } /** * Converts a value to cardinal (written) form. * @param {number|string|bigint} value Number to be convert. * @param {object} [options] Options for class. * @returns {string} Value in cardinal (written) format. * @throws {Error} Value cannot be invalid. */ export default function floatToCardinal (value, options = {}) { return new N2WordsCZ(options).floatToCardinal(value); }