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