فرمت‌بندی رشته در لوا

تابع string.format و الگوهای %d، %s، %f برای ساخت رشته‌های قالب‌بندی‌شده

چرا فرمت‌بندی؟

الحاق با .. برای موارد ساده خوب است، اما وقتی می‌خواهید رشته‌ای منظم با اعداد، اعشار و ترازبندی بسازید، string.format بهترین ابزار است — مثل printf در زبان C:

local name = "علی"
    local age = 25
    
    -- با الحاق:
    print("نام: " .. name .. ", سن: " .. age)
    
    -- با format (تمیزتر!):
    print(string.format("نام: %s، سن: %d", name, age))

الگوهای رایج

الگوبرایمثال
%dعدد صحیحstring.format("%d", 42) → 42
%fعدد اعشاریstring.format("%f", 3.14) → 3.140000
%.2fاعشار با ۲ رقمstring.format("%.2f", 3.14159) → 3.14
%sرشتهstring.format("%s", "سلام") → سلام
%qرشته امن برای لوابا escape
%xهگزادسیمالstring.format("%x", 255) → ff
%%علامت %"100%%" → 100%

عرض و ترازبندی

می‌توانید عرض مینیمم تعیین کنید — عالی برای جدول‌ها:

-- %10d : عدد در فضای ۱۰ کاراکتری (راست‌چین)
    print(string.format("|%10d|", 42))     -- |        42|
    
    -- %-10s : رشته در فضای ۱۰ کاراکتری (چپ‌چین)
    print(string.format("|%-10s|", "lua")) -- |lua       |

مثال عملی: جدول ضرب

for i = 1, 5 do
      print(string.format("%2d × %2d = %3d", i, i, i * i))
    end

مثال عملی: نمایش پول

local prices = {1500, 250000, 99.99}
    
    for _, price in ipairs(prices) do
      print(string.format("قیمت: %,.2f تومان", price))
    end

مثال عملی: درصد پیشرفت

local function progress(current, total)
      local pct = (current / total) * 100
      return string.format("پیشرفت: %.1f%%", pct)
    end
    
    print(progress(3, 4))    -- پیشرفت: 75.0%
    print(progress(1, 3))    -- پیشرفت: 33.3%
برای اعداد اعشاری همیشه از %.Nf استفاده کنید تا خروجی قابل‌پیش‌بینی باشد — %f پیش‌فرض ۶ رقم اعشار نشان می‌دهد!

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط