Hướng dẫn
Quảng cáo

Dùng JS hiển thị số tiền bằng chữ trong tiếng Việt

Bài viết sẽ hướng dẫn các bạn cách hiển thị số tiền bằng chữ trong tiếng Việt bằng cách dùng JS.

Trong khi đang xử lý một vấn đề đó là hiển thị số tiền bằng chữ khi nhập liệu vào thì mình thấy rằng có lẽ nhiều bạn cũng sẽ vướng mắc ở điều tương tự như vậy, nên mình gửi các bạn cách mình giải quyết vấn đề để tham khảo.

Viết hàm JavaScript để chuyển đổi số thành chữ

Ví dụ

// Hàm chuyển đổi số thành chữ
const units = ["", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"];
const tens = ["", "", "hai mươi", "ba mươi", "bốn mươi", "năm mươi", "sáu mươi", "bảy mươi", "tám mươi", "chín mươi"];
const scales = ["", "nghìn", "triệu", "tỷ"];

function convertToWords(num) {
    if (num === 0) return "không";

    let words = "";
    let scale = 0;

    while (num > 0) {
        let chunk = num % 1000;
        if (chunk) {
            let chunkWords = convertChunk(chunk);
            words = chunkWords + " " + scales[scale] + " " + words;
        }
        num = Math.floor(num / 1000);
        scale++;
    }

    return words.trim().replace(/\s+/g, ' '); // Clean up extra spaces
}

function convertChunk(chunk) {
    if (chunk === 0) return "";

    let hundreds = Math.floor(chunk / 100);
    let remainder = chunk % 100;
    let tensDigit = Math.floor(remainder / 10);
    let unitsDigit = remainder % 10;

    let words = "";

    if (hundreds) {
        words += units[hundreds] + " trăm ";
    }

    if (remainder) {
        if (hundreds && remainder < 10) {
            words += "lẻ ";
        }

        if (remainder < 10) {
            words += units[remainder];
        } else if (remainder < 20) {
            words += "mười " + units[unitsDigit];
        } else {
            words += tens[tensDigit];
            if (unitsDigit) {
                words += " " + units[unitsDigit];
            }
        }
    }

    return words.trim();
}

Cách sử dụng

Đây là một ví dụ cụ thể về cách sử dụng hàm trên

Ví dụ

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hiển Thị Số Tiền Bằng Chữ</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function() {
            $('#amount').on('input', function() {
                let amount = $(this).val();
                amount = amount.replace(/\D/g, ''); // Remove non-numeric characters
                let words = convertToWords(Number(amount));
                $('#amountInWords').text(words);
            });

           // Hàm chuyển đổi số thành chữ
const units = ["", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"];
const tens = ["", "", "hai mươi", "ba mươi", "bốn mươi", "năm mươi", "sáu mươi", "bảy mươi", "tám mươi", "chín mươi"];
const scales = ["", "nghìn", "triệu", "tỷ"];

function convertToWords(num) {
    if (num === 0) return "không";

    let words = "";
    let scale = 0;

    while (num > 0) {
        let chunk = num % 1000;
        if (chunk) {
            let chunkWords = convertChunk(chunk);
            words = chunkWords + " " + scales[scale] + " " + words;
        }
        num = Math.floor(num / 1000);
        scale++;
    }

    return words.trim().replace(/\s+/g, ' '); // Clean up extra spaces
}

function convertChunk(chunk) {
    if (chunk === 0) return "";

    let hundreds = Math.floor(chunk / 100);
    let remainder = chunk % 100;
    let tensDigit = Math.floor(remainder / 10);
    let unitsDigit = remainder % 10;

    let words = "";

    if (hundreds) {
        words += units[hundreds] + " trăm ";
    }

    if (remainder) {
        if (hundreds && remainder < 10) {
            words += "lẻ ";
        }

        if (remainder < 10) {
            words += units[remainder];
        } else if (remainder < 20) {
            words += "mười " + units[unitsDigit];
        } else {
            words += tens[tensDigit];
            if (unitsDigit) {
                words += " " + units[unitsDigit];
            }
        }
    }

    return words.trim();
}
        });
    </script>
</head>
<body>
    <form>
        <label for="amount">Nhập số tiền:</label>
        <input type="text" id="amount" placeholder="Nhập số tiền">
        <p>Số tiền bằng chữ: <span id="amountInWords"></span></p>
    </form>
</body>
</html>

Cách thức hoạt động

Hàm convertToWords chuyển đổi một số thành các từ tiếng Việt bằng cách chia số thành các khối gồm ba chữ số.
Hàm convertChunk xử lý việc chuyển đổi từng khối.
Trong HTML, một trình lắng nghe sự kiện được thêm vào trường nhập với ID amount.

Bất cứ khi nào đầu vào thay đổi, giá trị sẽ được chuyển đổi thành các từ và hiển thị trong khoảng với ID amountInWords.
Mã này sẽ chuyển đổi giá trị số được nhập vào trường nhập thành các từ tiếng Việt tương ứng và hiển thị kết quả.

Hàm JS định dạng tiền tệ Việt Nam

trong quá trình sử dụng mình cũng thấy chắc nhiều bạn cần các định dạng tiền tệ Việt Nam bằng JS, dưới đây là hàm định dạng tiền tệ Việt Nam cho bạn nào cần

Ví dụ

 function formatMoney(value) {
            return new Intl.NumberFormat('vi-VN', {
                style: 'currency',
                currency: 'VND',
                maximumFractionDigits: 0
            }).format(value);
        }

Có gì cần trao đổi vui lòng liên hệ lại với mình qua email nhé

Bài viết này đã giúp ích cho bạn?

Bài viết mới

Advertisements