اذهب إلى المحتوى
  • 0

داله التفقيط لتحويل الارقام الي حروف عربيه

صابر مغترب

السؤال

احبتي  الكرام السلام عليكم ورحمه الله  عندي الداله واعتقد بانها لا تتعامل صحيحا اريد تتعامل  صحيح مع الالوف مثلا 102500 هنا اريد مائة الف والفين وخمسمائه ريال او تعطونا الطريقه الصحيحه//

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QTextEdit, QMessageBox


class TafqitApp(QWidget):
    def __init__(self):
        super().__init__()

        # إعداد الواجهة
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        # حقل إدخال الرقم
        self.input_label = QLabel("أدخل المبلغ:")
        self.input_field = QLineEdit()

        # زر التحويل
        self.convert_button = QPushButton("تحويل إلى حروف")
        self.convert_button.clicked.connect(self.convert_to_words)

        # حقل عرض النص المحول
        self.result_label = QLabel("الناتج بالحروف:")
        self.result_field = QTextEdit()
        self.result_field.setReadOnly(True)


        # إضافة العناصر إلى الواجهة
        layout.addWidget(self.input_label)
        layout.addWidget(self.input_field)
        layout.addWidget(self.convert_button)
        layout.addWidget(self.result_label)
        layout.addWidget(self.result_field)
       

        self.setLayout(layout)
        self.setWindowTitle("تحويل الأرقام إلى حروف")

    # دالة لتحويل الرقم إلى نص
    def tafqit(self, number):
        def tafqitThreeDigits(n):
            units = ["", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة"]
            teens = ["عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر", "ستة عشر", "سبعة عشر", "ثمانية عشر", "تسعة عشر"]
            tens = ["", "عشرة", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون"]            
            hundreds = ["", "مائة", "مائتان", "ثلاثمائة", "أربعمائة", "خمسمائة", "ستمائة", "سبعمائة", "ثمانمائة", "تسعمائة"]

            result = ""

            hundred = n // 100
            n %= 100
            ten = n // 10
            unit = n % 10

            if hundred > 0:
                result += hundreds[hundred] + " "

            if 10 <= n < 20:
                result += teens[n - 10] + " "
            else:
                if unit > 0:
                    result += units[unit] + " "  # الوحدة أولاً
                if ten > 0:
                    result += "و " + tens[ten] + " " if unit > 0 else tens[ten] + " "  
            return result.strip()

        if number == 0:
            return "صفر"

        # تقسيم الرقم إلى الريال والهللات
        whole_part = int(number)
        fractional_part = round((number - whole_part) * 100)

        millions = whole_part // 1000000
        whole_part %= 1000000
        thousands = whole_part // 1000
        whole_part %= 1000

        result = ""

        if millions > 0:
            result += tafqitThreeDigits(millions) + " مليون "
        
        if thousands > 0:
            # إضافة "ألف" بدون "واحد" إذا كان العدد أكثر من 1000
            result += tafqitThreeDigits(thousands) + " ألف " if thousands > 1 else "ألف "

        if whole_part > 0:
            result += "و " + tafqitThreeDigits(whole_part) if result else tafqitThreeDigits(whole_part)  
        
        result += " ريال"  # إضافة "ريال" بعد الرقم الأساسي

        # إضافة الهللات إذا كانت موجودة
        if fractional_part > 0:
            result += " و " + tafqitThreeDigits(fractional_part) + " هللة"

        return result.strip()

    # دالة لتحويل الرقم في الحقل إلى نص وعرضه
    def convert_to_words(self):
        try:
            number = float(self.input_field.text())
            result = self.tafqit(number)
            self.result_field.setText(result)
        except ValueError:
            self.result_field.setText("الرجاء إدخال رقم صالح")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = TafqitApp()
    window.show()
    sys.exit(app.exec())

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

لا توجد أي إجابات على هذا السؤال بعد

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...