Преобразование чисел в слова: подробное руководство с примерами кода

Преобразование чисел в слова — обычное требование в различных приложениях, таких как создание счетов, печать чеков или отображение числовых значений в более удобном для чтения формате. В этой статье мы рассмотрим несколько методов преобразования чисел в слова, используя примеры кода на разных языках программирования. В итоге у вас будет целый ряд вариантов на выбор в зависимости от ваших конкретных потребностей.

Метод 1: рекурсивный подход (Python)
Рекурсивный подход — это простой способ преобразования чисел в слова. Вот пример реализации на Python:

def convert_to_words(number):
    units = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    teens = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
    tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
    if number < 0:
        return 'minus ' + convert_to_words(abs(number))
    if number < 10:
        return units[number]
    if number < 20:
        return teens[number - 10]
    if number < 100:
        return tens[number // 10] + ('-' + convert_to_words(number % 10) if number % 10 != 0 else '')
    if number < 1000:
        return units[number // 100] + ' hundred ' + convert_to_words(number % 100)
    if number < 1000000:
        return convert_to_words(number // 1000) + ' thousand ' + convert_to_words(number % 1000)
    if number < 1000000000:
        return convert_to_words(number // 1000000) + ' million ' + convert_to_words(number % 1000000)
    if number < 1000000000000:
        return convert_to_words(number // 1000000000) + ' billion ' + convert_to_words(number % 1000000000)
    return 'Number out of range'
number = 123456789
words = convert_to_words(number)
print(words)  # Output: "one hundred twenty-three million four hundred fifty-six thousand seven hundred eighty-nine"

Метод 2: таблица поиска (JavaScript)
Использование таблицы поиска — еще один эффективный подход. Вот пример реализации на JavaScript:

function convertToWords(number) {
    const units = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    const teens = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
    const tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
    if (number < 0) {
        return 'minus ' + convertToWords(Math.abs(number));
    }
    if (number < 10) {
        return units[number];
    }
    if (number < 20) {
        return teens[number - 10];
    }
    if (number < 100) {
        return tens[Math.floor(number / 10)] + (number % 10 !== 0 ? '-' + convertToWords(number % 10) : '');
    }
    if (number < 1000) {
        return convertToWords(Math.floor(number / 100)) + ' hundred ' + convertToWords(number % 100);
    }
    if (number < 1000000) {
        return convertToWords(Math.floor(number / 1000)) + ' thousand ' + convertToWords(number % 1000);
    }
    if (number < 1000000000) {
        return convertToWords(Math.floor(number / 1000000)) + ' million ' + convertToWords(number % 1000000);
    }
    if (number < 1000000000000) {
        return convertToWords(Math.floor(number / 1000000000)) + ' billion ' + convertToWords(number % 1000000000);
    }
    return 'Number out of range';
}
const number = 987654321;
const words = convertToWords(number);
console.log(words);  // Output: "nine hundred eighty-seven million six hundred fifty-four thousand three hundred twenty-one"

Метод 3: библиотека или пакет (Java – Apache Commons Lang)
В Java вы можете использовать существующие библиотеки или пакеты для упрощения процесса преобразования. Одной из таких библиотек является Apache Commons Lang. Вот пример использования Apache Commons Lang в Java:

import org.apache.commons.lang3.text.WordUtils;
public class NumberToWordsConverter {
    public static String convertToWords(int number) {
        String words = NumberToWordsConverterHelper.convert(number);
        return WordUtils.capitalize(words);
    }
    public static void main(String[] args) {
        int number = 123456789;
        String words = convertToWords(number);
        System.out.println(words);  // Output: "One Hundred Twenty-Three Million Four Hundred Fifty-Six Thousand Seven Hundred Eighty-Nine"
    }
}

В этом примере мы используем класс NumberToWordsConverterHelperиз Apache Commons Lang для преобразования чисел в слова. Метод WordUtils.capitalize()используется для написания полученных слов с заглавной буквы.

В этой статье мы рассмотрели три различных метода преобразования чисел в слова. Вы можете выбрать метод, который лучше всего соответствует вашим требованиям и предпочтениям языка программирования. Независимо от того, предпочитаете ли вы рекурсивный подход, таблицу поиска или использование библиотеки, эти примеры послужат хорошей отправной точкой для преобразования чисел в слова.

Не забудьте выбрать метод, который соответствует требованиям вашего проекта, соображениям производительности и возможностям языка программирования. Удачи в экспериментах и ​​реализации преобразования чисел в слова в своих приложениях!