0Pricing
Lua Academy · บทเรียน

string.format สำหรับผลลัพธ์

จัดรูปแบบข้อความด้วย %s, %d, %f และตัวระบุรูปแบบอื่น ๆ

string.format สำหรับผลลัพธ์ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

พื้นฐาน string.format

string.format(fmt, ...) จัดรูปแบบค่าด้วยตัวระบุรูปแบบสไตล์ C และคืนค่าสตริงที่จัดรูปแบบแล้ว สตริงรูปแบบประกอบด้วยข้อความตามตัวอักษรและตัวระบุการแปลงที่ขึ้นต้นด้วย % นี่เป็นวิธีหลักในการสร้างผลลัพธ์ที่แม่นยำใน Lua

print(string.format("Hello, %s!", "Lua"))      -- Hello, Lua!
print(string.format("Pi is %.4f", math.pi))   -- Pi is 3.1416
print(string.format("%d items at $%.2f each", 5, 2.99))

%d และ %i สำหรับจำนวนเต็ม

%d และ %i ใช้จัดรูปแบบจำนวนเต็ม เพิ่มความกว้างเพื่อเติมช่องว่าง: %5d จัดให้มีความกว้าง 5 อักขระและชิดขวา ส่วน %-5d จัดชิดซ้าย และ %05d เติมด้วยศูนย์ ตัวระบุเหล่านี้จะตัดส่วนทศนิยมของจำนวนลอยตัว หากจำเป็น ให้ใช้ math.floor() ก่อน

print(string.format("%d",  42))       -- 42
print(string.format("%5d", 42))       --    42 (right-aligned)
print(string.format("%-5d|", 42))     -- 42   | (left-aligned)
print(string.format("%05d", 42))      -- 00042
print(string.format("%+d", 42))       -- +42

%f และ %e สำหรับจำนวนลอยตัว

%f จัดรูปแบบด้วยสัญกรณ์จุดทศนิยมคงที่ ส่วน %e ใช้สัญกรณ์วิทยาศาสตร์ และ %g จะเลือกแบบที่สั้นกว่า ตัวระบุความละเอียด เช่น %.2f ใช้ควบคุมจำนวนตำแหน่งทศนิยม โดยค่าเริ่มต้นคือ 6

print(string.format("%.2f",  3.14159)) -- 3.14
print(string.format("%10.3f", 3.14))   --      3.140
print(string.format("%e", 12345.678))  -- 1.234568e+04
print(string.format("%.2e", 0.001))    -- 1.00e-03
print(string.format("%g", 100.0))      -- 100

%s สำหรับสตริง

%s ใช้แทรกสตริง ค่าที่ไม่ใช่สตริงจะถูกแปลงด้วย tostring ความกว้างและการจัดแนวทำงานเช่นเดียวกับตัวเลข ส่วน %q จะใส่เครื่องหมายคำพูดให้สตริงในรูปแบบที่ Lua อ่านได้ พร้อมอักขระหลีก ซึ่งเหมาะสำหรับการทำอนุกรม

print(string.format("%-10s|", "hi"))   -- hi        |
print(string.format("%10s|", "hi"))    --         hi|
print(string.format("%.3s", "hello"))  -- hel (truncate)
print(string.format("%q", 'say "hi"'))-- "say \"hi\""
print(string.format("%s=%s", "key","val")) -- key=val

%x และ %o สำหรับฐานอื่น

%x จัดรูปแบบจำนวนเต็มเป็นเลขฐานสิบหกตัวพิมพ์เล็ก ส่วน %X ใช้เลขฐานสิบหกตัวพิมพ์ใหญ่ %o ใช้เลขฐานแปด และ %u ใช้จำนวนเต็มไม่มีเครื่องหมาย ตัวระบุเหล่านี้มีประโยชน์สำหรับการแสดงบิตมาสก์ รหัสสี และการเขียนโปรแกรมระดับล่าง

print(string.format("%x",  255))   -- ff
print(string.format("%X",  255))   -- FF
print(string.format("%#x", 255))   -- 0xff (with prefix)
print(string.format("%o",  8))     -- 10 (octal)
print(string.format("%08x", 0xDEAD)) -- 0000dead

ค่าหลายค่า

ส่งอาร์กิวเมนต์ให้มีจำนวนเท่ากับตัวระบุรูปแบบ จำนวนอาร์กิวเมนต์ต้องตรงกัน หากมีน้อยเกินไปจะเกิดข้อผิดพลาด ส่วนอาร์กิวเมนต์ที่เกินจะถูกละเว้น ใช้สตริงรูปแบบเพื่อสร้างผลลัพธ์ที่มีโครงสร้าง เช่น ตาราง บันทึก หรือรายงาน

local function printRow(name, score, grade)
  print(string.format("%-12s  %3d  %s", name, score, grade))
end

printRow("Alice",    95, "A")
printRow("Bob",      87, "B")
printRow("Carol",    91, "A")
-- Alice         95  A
-- Bob           87  B
-- Carol         91  A

การสร้างแม่แบบรูปแบบ

เก็บสตริงรูปแบบเป็นค่าคงที่เพื่อนำกลับมาใช้ซ้ำ วิธีนี้ช่วยให้ผลลัพธ์สอดคล้องกันและทำให้เปลี่ยนรูปแบบจากจุดเดียวได้ง่าย การจัดรูปแบบสตริงเป็นพื้นฐานของการบันทึกข้อมูล ผลลัพธ์ CSV และการสร้างรายงาน

local LOG_FMT = "[%s] %s: %s"

local function log(level, module, msg)
  print(string.format(LOG_FMT, level, module, msg))
end

log("INFO",  "server", "started on port 8080")
log("WARN",  "db",     "connection pool low")
log("ERROR", "auth",   "token expired")

การเติมช่องว่างและการจัดแนว

ใช้ตัวระบุความกว้างเพื่อจัดแนวผลลัพธ์ ความกว้างเป็นบวกจะจัดชิดขวา ส่วนความกว้างเป็นลบจะจัดชิดซ้าย วิธีนี้มีประโยชน์อย่างยิ่งสำหรับตารางและรายงานที่ต้องจัดคอลัมน์ให้ตรงกัน ใช้ร่วมกับ string.rep เพื่อสร้างเส้นคั่น

local fmt = "%-15s %6s %8s"
print(string.format(fmt, "Name", "Score", "Grade"))
print(string.rep("-", 31))
local data = {{"Alice",95,"A"},{"Bob",87,"B"},{"Dave",78,"C"}}
for _, r in ipairs(data) do
  print(string.format(fmt, r[1], r[2], r[3]))
end

%c และ %% ตามตัวอักษร

%c แปลงจำนวนเต็มเป็นอักขระ ASCII ที่สอดคล้องกัน ส่วน %% สร้างเครื่องหมายเปอร์เซ็นต์ตามตัวอักษร ตัวระบุเหล่านี้มีประโยชน์สำหรับการสร้างอักขระพิเศษหรือใส่เครื่องหมาย % ในสตริงรูปแบบ

print(string.format("%c%c%c", 76, 117, 97))  -- Lua
print(string.format("100%%"))                -- 100%
print(string.format("%.1f%%", 87.5))         -- 87.5%

-- Build a progress bar
local pct = 65
local filled = math.floor(pct / 5)
local bar = "[" .. string.rep("#",filled) .. string.rep(".",20-filled) .. "]"
print(bar .. " " .. pct .. "%")

string.format เทียบกับ tostring

ใช้ tostring สำหรับการแปลงค่าทุกชนิดแบบง่าย ๆ และใช้ string.format เมื่อต้องควบคุมความละเอียด เติมช่องว่าง หรือจัดรูปแบบหลายค่า string.format("%s", val) จะเรียก tostring ภายในสำหรับการแปลงเป็นสตริง

-- tostring: simple, any type
print(tostring(3.14))      -- 3.14
print(tostring(true))      -- true
print(tostring(nil))       -- nil

-- string.format: precision + structure
print(string.format("%.2f", 3.14159))  -- 3.14
print(string.format("%d", 255))        -- 255
-- print(string.format("%d", true))    -- ERROR

ตรวจสอบอย่างรวดเร็ว

string.format("%05.2f", 3.1) ให้ผลลัพธ์เป็นอะไร

สรุป: string.format

สรุป:

  • %s สตริง, %d จำนวนเต็ม, %f จำนวนลอยตัว, %x เลขฐานสิบหก
  • ความกว้าง: %10d จัดชิดขวา, %-10d จัดชิดซ้าย, %010d เติมศูนย์
  • ความละเอียด: %.2f (ทศนิยม 2 ตำแหน่ง), %.3s (3 อักขระ)
  • %q ใส่เครื่องหมายคำพูดให้สตริงเพื่อให้ Lua แยกวิเคราะห์ได้
  • %% เครื่องหมายเปอร์เซ็นต์ตามตัวอักษร

คำถามที่พบบ่อย

บทเรียน “string.format สำหรับผลลัพธ์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “string.format สำหรับผลลัพธ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “string.format สำหรับผลลัพธ์”

จัดรูปแบบข้อความด้วย %s, %d, %f และตัวระบุรูปแบบอื่น ๆ คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “string.format สำหรับผลลัพธ์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐานข้อความ: การต่อและความยาว
  2. การค้นหาและดึงข้อความย่อย
  3. string.format สำหรับผลลัพธ์
  4. string.gsub และ string.gmatch
← กลับไปที่ Lua Academy