fix prints
This commit is contained in:
		
							parent
							
								
									6367d34f0c
								
							
						
					
					
						commit
						10810f8700
					
				
					 15 changed files with 423 additions and 245 deletions
				
			
		| 
						 | 
				
			
			@ -192,4 +192,122 @@ def normalize_size(size: int) -> str:
 | 
			
		|||
        return f"{int(size_mb)} MB" if size_mb.is_integer() else f"{size_mb:.1f} MB"
 | 
			
		||||
    else:
 | 
			
		||||
        size_gb = size / (1024 * 1024 * 1024)
 | 
			
		||||
        return f"{int(size_gb)} GB" if size_gb.is_integer() else f"{size_gb:.1f} GB"
 | 
			
		||||
        return f"{int(size_gb)} GB" if size_gb.is_integer() else f"{size_gb:.1f} GB"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def number_to_persian_words(number):
 | 
			
		||||
    """
 | 
			
		||||
    تبدیل عدد به حروف فارسی
 | 
			
		||||
    مثال: 12345 -> دوازده هزار و سیصد و چهل و پنج
 | 
			
		||||
    """
 | 
			
		||||
    try:
 | 
			
		||||
        # تبدیل به عدد صحیح (در صورت نیاز)
 | 
			
		||||
        from decimal import Decimal
 | 
			
		||||
        if isinstance(number, Decimal):
 | 
			
		||||
            number = int(number)
 | 
			
		||||
        elif isinstance(number, float):
 | 
			
		||||
            number = int(number)
 | 
			
		||||
        elif isinstance(number, str):
 | 
			
		||||
            number = int(float(number.replace(',', '')))
 | 
			
		||||
        
 | 
			
		||||
        if number == 0:
 | 
			
		||||
            return "صفر"
 | 
			
		||||
        
 | 
			
		||||
        if number < 0:
 | 
			
		||||
            return "منفی " + number_to_persian_words(abs(number))
 | 
			
		||||
        
 | 
			
		||||
        # اعداد یک رقمی
 | 
			
		||||
        ones = [
 | 
			
		||||
            "", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه"
 | 
			
		||||
        ]
 | 
			
		||||
        
 | 
			
		||||
        # اعداد ده تا نوزده
 | 
			
		||||
        teens = [
 | 
			
		||||
            "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده",
 | 
			
		||||
            "شانزده", "هفده", "هجده", "نوزده"
 | 
			
		||||
        ]
 | 
			
		||||
        
 | 
			
		||||
        # اعداد بیست تا نود
 | 
			
		||||
        tens = [
 | 
			
		||||
            "", "", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود"
 | 
			
		||||
        ]
 | 
			
		||||
        
 | 
			
		||||
        # اعداد صد تا نهصد
 | 
			
		||||
        hundreds = [
 | 
			
		||||
            "", "یکصد", "دویست", "سیصد", "چهارصد", "پانصد",
 | 
			
		||||
            "ششصد", "هفتصد", "هشتصد", "نهصد"
 | 
			
		||||
        ]
 | 
			
		||||
        
 | 
			
		||||
        # مراتب بزرگتر
 | 
			
		||||
        scale = [
 | 
			
		||||
            "", "هزار", "میلیون", "میلیارد", "بیلیون", "بیلیارد"
 | 
			
		||||
        ]
 | 
			
		||||
        
 | 
			
		||||
        def convert_group(num):
 | 
			
		||||
            """تبدیل گروه سه رقمی به حروف"""
 | 
			
		||||
            if num == 0:
 | 
			
		||||
                return ""
 | 
			
		||||
            
 | 
			
		||||
            result = []
 | 
			
		||||
            
 | 
			
		||||
            # صدها
 | 
			
		||||
            h = num // 100
 | 
			
		||||
            if h > 0:
 | 
			
		||||
                result.append(hundreds[h])
 | 
			
		||||
            
 | 
			
		||||
            # دهگان و یکان
 | 
			
		||||
            remainder = num % 100
 | 
			
		||||
            
 | 
			
		||||
            if remainder >= 10 and remainder < 20:
 | 
			
		||||
                # اعداد 10 تا 19
 | 
			
		||||
                result.append(teens[remainder - 10])
 | 
			
		||||
            else:
 | 
			
		||||
                # دهگان
 | 
			
		||||
                t = remainder // 10
 | 
			
		||||
                if t > 0:
 | 
			
		||||
                    result.append(tens[t])
 | 
			
		||||
                
 | 
			
		||||
                # یکان
 | 
			
		||||
                o = remainder % 10
 | 
			
		||||
                if o > 0:
 | 
			
		||||
                    result.append(ones[o])
 | 
			
		||||
            
 | 
			
		||||
            return " و ".join(result)
 | 
			
		||||
        
 | 
			
		||||
        # تقسیم عدد به گروههای سه رقمی
 | 
			
		||||
        groups = []
 | 
			
		||||
        scale_index = 0
 | 
			
		||||
        
 | 
			
		||||
        while number > 0:
 | 
			
		||||
            group = number % 1000
 | 
			
		||||
            if group != 0:
 | 
			
		||||
                group_text = convert_group(group)
 | 
			
		||||
                if scale_index > 0:
 | 
			
		||||
                    group_text += " " + scale[scale_index]
 | 
			
		||||
                groups.append(group_text)
 | 
			
		||||
            
 | 
			
		||||
            number //= 1000
 | 
			
		||||
            scale_index += 1
 | 
			
		||||
        
 | 
			
		||||
        # معکوس کردن و ترکیب گروهها
 | 
			
		||||
        groups.reverse()
 | 
			
		||||
        result = " و ".join(groups)
 | 
			
		||||
        
 | 
			
		||||
        return result
 | 
			
		||||
    
 | 
			
		||||
    except Exception:
 | 
			
		||||
        return ""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def amount_to_persian_words(amount):
 | 
			
		||||
    """
 | 
			
		||||
    تبدیل مبلغ به حروف فارسی با واحد ریال
 | 
			
		||||
    مثال: 12345 -> دوازده هزار و سیصد و چهل و پنج ریال
 | 
			
		||||
    """
 | 
			
		||||
    try:
 | 
			
		||||
        words = number_to_persian_words(amount)
 | 
			
		||||
        if words:
 | 
			
		||||
            return words + " ریال"
 | 
			
		||||
        return ""
 | 
			
		||||
    except Exception:
 | 
			
		||||
        return ""
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue