1. บทนำ
ในภาษา C จะใช้ตัวกำหนดรูปแบบ (Format Specifier) เพื่อแสดงผลหรือรับค่าข้อมูลตัวเลขและสตริง โดยเฉพาะเมื่อทำงานกับจำนวนทศนิยมแบบลอยตัว (Floating Point) การทำความเข้าใจความแตกต่างระหว่างตัวกำหนด %f
และ %lf
เป็นสิ่งสำคัญต่อการเขียนโปรแกรมที่ถูกต้อง บทความนี้จะมุ่งเน้นไปที่การใช้งาน %lf
ซึ่งรองรับชนิดข้อมูลทศนิยมความแม่นยำสองเท่า (double
) พร้อมอธิบายวิธีใช้ในฟังก์ชัน printf
และ scanf
รวมถึงความแตกต่างจากตัวกำหนดอื่นๆ
2. ตัวกำหนดรูปแบบคืออะไร
ตัวกำหนดรูปแบบคือสัญลักษณ์ที่ใช้กำหนดรูปแบบการแสดงผลหรือการรับข้อมูลในภาษา C การใช้ตัวกำหนดให้เหมาะกับชนิดข้อมูล จะช่วยให้การรับและแสดงผลข้อมูลมีความถูกต้อง มาดูตัวอย่างตัวกำหนดรูปแบบที่ใช้บ่อยและชนิดข้อมูลที่รองรับ
ตัวกำหนดรูปแบบหลักและชนิดข้อมูลที่รองรับ
ตัวกำหนดรูปแบบ | ชนิดข้อมูลที่รองรับ |
---|---|
%d | ชนิด int (จำนวนเต็ม) |
%f | ชนิด float (ทศนิยมความแม่นยำเดี่ยว) |
%lf | ชนิด double (ทศนิยมความแม่นยำสองเท่า) |
%Lf | ชนิด long double (ทศนิยมความแม่นยำขยาย) |
3. การใช้ %lf
ในฟังก์ชัน printf
ฟังก์ชัน printf
ในภาษา C ใช้เพื่อแสดงผลข้อมูลตามรูปแบบที่กำหนด เมื่อต้องการแสดงผลค่าทศนิยมความแม่นยำสองเท่า สามารถใช้ได้ทั้ง %f
และ %lf
แต่จะมีความแตกต่างเล็กน้อยในการใช้งาน
ความแตกต่างระหว่าง %lf
และ %f
ใน printf
ใน printf
ทั้ง %f
และ %lf
สามารถใช้แสดงผลชนิด double
ได้เหมือนกัน เนื่องจาก printf
จะทำการแปลงอาร์กิวเมนต์แบบทศนิยมให้เป็น double
โดยอัตโนมัติ ดังนั้นโดยทั่วไปจะนิยมใช้ %f
ในการแสดงผลค่าทศนิยมความแม่นยำสองเท่า
ตัวอย่างการใช้งาน
#include <stdio.h>
int main() {
double num = 3.14159;
printf("%f\n", num); // ผลลัพธ์: 3.141590
printf("%lf\n", num); // ผลลัพธ์: 3.141590
return 0;
}
จากตัวอย่าง จะเห็นว่าได้ผลลัพธ์เหมือนกันทั้งสองแบบ แต่โดยมาตรฐานแล้วจะใช้ %f
สำหรับการแสดงผลชนิด double
ใน printf
4. การใช้ %lf
ในฟังก์ชัน scanf
ฟังก์ชัน scanf
ใช้เพื่อรับค่าที่ผู้ใช้ป้อนและเก็บลงในตัวแปรชนิดที่กำหนด ใน scanf
การจับคู่ตัวกำหนดกับชนิดข้อมูลของตัวแปรเป็นสิ่งสำคัญ และในจุดนี้จะต้องแยกการใช้ %f
และ %lf
ให้ถูกต้อง
ความแตกต่างระหว่าง %lf
และ %f
ใน scanf
%f
: ใช้เมื่อรับค่าลงในตัวแปรชนิดfloat
%lf
: ใช้เมื่อรับค่าลงในตัวแปรชนิดdouble
ต้องใช้%lf
เสมอเมื่อรับค่าลงในdouble
ตัวอย่างการใช้งาน
#include <stdio.h>
int main() {
double num;
printf("กรุณาป้อนตัวเลข: ");
scanf("%lf", &num); // เก็บค่าที่ป้อนไว้ในตัวแปร double
printf("ค่าที่ป้อนคือ: %f\n", num);
return 0;
}
ดังนั้น เมื่อรับค่าทศนิยมความแม่นยำสองเท่าด้วย scanf
ต้องใช้ %lf
หากใช้ผิด เช่นใช้ %f
อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด
5. ข้อควรระวังในการใช้ %lf
การใช้ %lf
ต้องจับคู่กับตัวแปรชนิด double
โดยเฉพาะใน scanf
หากชนิดข้อมูลและตัวกำหนดไม่ตรงกัน อาจทำให้เกิดข้อผิดพลาดหรือผลลัพธ์ไม่ถูกต้อง
ความผิดพลาดที่พบบ่อยและวิธีที่ถูกต้อง
ตัวอย่างที่ผิด
#include <stdio.h>
int main() {
float num;
printf("กรุณาป้อนตัวเลข: ");
scanf("%lf", &num); // ใช้ตัวกำหนดไม่ถูกต้อง
return 0;
}
ตัวอย่างที่ถูกต้อง
#include <stdio.h>
int main() {
double num;
printf("กรุณาป้อนตัวเลข: ");
scanf("%lf", &num); // ใช้ตัวกำหนดถูกต้อง
return 0;
}
ในการใช้ scanf
ต้องแน่ใจว่าตัวกำหนดและชนิดข้อมูลตรงกัน

6. ความแตกต่างจากตัวกำหนดอื่น
การเข้าใจตัวกำหนดอื่นๆ นอกจาก %lf
จะช่วยให้สามารถเลือกใช้ได้เหมาะสมกับงาน
ตัวกำหนดรูปแบบหลักและการใช้งาน
%f
: ใช้กับข้อมูลชนิดfloat
(และdouble
ในprintf
)%Lf
: ใช้กับข้อมูลชนิดlong double
%e
/%E
: ใช้แสดงผลแบบวิทยาศาสตร์ (Scientific notation)
ตัวอย่างและคำอธิบายความแตกต่าง
#include <stdio.h>
int main() {
long double num_long_double = 3.14159265358979323846L;
printf("แสดงผล long double: %Lf\n", num_long_double);
printf("แสดงผลแบบวิทยาศาสตร์: %e\n", num_long_double);
return 0;
}
การเลือกตัวกำหนดให้ตรงกับชนิดข้อมูลจะช่วยให้ผลลัพธ์ถูกต้องและแม่นยำ
7. สรุป
เราได้อธิบายการใช้ตัวกำหนด %lf
สำหรับชนิด double
ในภาษา C โดยมีประเด็นสำคัญดังนี้
printf
: ใช้ได้ทั้ง%f
และ%lf
แต่โดยทั่วไปใช้%f
scanf
: ใช้%lf
กับdouble
และใช้%f
กับfloat
ต้องให้ตัวกำหนดและชนิดข้อมูลตรงกัน- ข้อควรระวัง: หากใช้ตัวกำหนดไม่ตรงกับชนิดข้อมูล โดยเฉพาะใน
scanf
อาจทำให้เกิดข้อผิดพลาด