JavaScript
Number Methods
toPrecision
เรียนรู้ `toPrecision()` สำหรับปัดเศษตามจำนวนเลขนัยสำคัญ (significant digits) ต่างจาก `toFixed()` ที่นับจากจุดทศนิยม พร้อมเข้าใจ exponential notation และ leading zero
toPrecision กำหนดจำนวนเลขนัยสำคัญของตัวเลข
`toPrecision(n)` คือ method ของ `number` ที่ปัดเศษตัวเลขให้มีเลขนัยสำคัญ (significant digits) รวม `n` หลัก แล้วคืนค่าเป็น string **เลขนัยสำคัญ** คือตัวเลขทุกหลักนับจากตัวแรกที่ไม่ใช่ศูนย์ (นับรวมหลักก่อนจุดทศนิยมด้วย) ต่างจาก `toFixed()` ที่นับเฉพาะหลักหลังจุดทศนิยม ใช้ `toPrecision()` เมื่อต้องการควบคุมจำนวนหลักทั้งหมดของตัวเลข เช่น แสดงค่าทางวิทยาศาสตร์ หรือย่อเลขจำนวนมากให้อ่านง่ายโดยคงความแม่นตามจำนวนหลักที่ต้องการ
const num = 123.456;
// toFixed(2): ทศนิยม 2 ตำแหน่งหลังจุด
console.log(num.toFixed(2)); // "123.46"
// toPrecision(4): เลขนัยสำคัญ 4 หลัก (นับรวมหลักก่อนจุด)
console.log(num.toPrecision(4)); // "123.5"
// toPrecision(6): เลขนัยสำคัญ 6 หลัก
console.log(num.toPrecision(6)); // "123.456"toFixed() นับหลักหลังจุดทศนิยม ส่วน toPrecision() นับทุกหลักที่เป็นเลขนัยสำคัญ
ตัวเลขใหญ่หรือเล็กมากจะแสดงผลเป็น exponential notation
เมื่อกำหนด `n` น้อยกว่าจำนวนหลักหน้าจุดทศนิยม `toPrecision()` จะแสดงผลลัพธ์ในรูปแบบ exponential notation (`e+`) เพื่อคงจำนวนเลขนัยสำคัญตามที่กำหนด ในทางกลับกัน สำหรับตัวเลขที่น้อยมาก (เช่น `0.000...`) leading zero จะไม่ถูกนับเป็นเลขนัยสำคัญ
// ตัวเลขใหญ่: n น้อยกว่าจำนวนหลักหน้าทศนิยม → exponential
console.log((1234).toPrecision(2)); // "1.2e+3"
console.log((99999).toPrecision(3)); // "1.00e+5"
// ตัวเลขเล็กมาก: leading zero ไม่นับเป็นนัยสำคัญ
console.log((0.0012345).toPrecision(3)); // "0.00123"
console.log((0.0000789).toPrecision(2)); // "0.000079"
// ผลลัพธ์ยังเป็น string เสมอ
console.log(typeof (1234).toPrecision(2)); // "string"- เลขหน้าจุดทศนิยม > n → แสดงเป็น exponential (e+)
- leading zero ไม่นับเป็นเลขนัยสำคัญ
- ผลลัพธ์เป็น string เช่นเดียวกับ toFixed()
- n ต้องเป็น 1–100 — น้อยกว่า 1 จะ throw RangeError
toFixed กับ toPrecision ใช้ต่างกันอย่างไร
ทั้ง `toFixed()` และ `toPrecision()` ใช้ปัดเศษและจัดรูปแบบตัวเลข แต่ต่างกันที่วิธีการนับหลัก:
| toFixed(n) | toPrecision(n) | |
|---|---|---|
| การนับหลัก | นับหลักหลังจุดทศนิยม | นับเลขนัยสำคัญรวมทุกหลัก |
| (123.456, 2) | "123.46" — ทศนิยม 2 ตำแหน่ง | "1.2e+2" — นัยสำคัญ 2 หลัก |
| (123.456, 4) | "123.46" — ทศนิยม 4 ตำแหน่ง เติม 0 | "123.5" — นัยสำคัญ 4 หลัก |
| return type | string | string |
| ใช้เมื่อ | แสดงราคา, เปอร์เซ็นต์, ค่าที่ต้องการความแม่นหลังจุด | แสดงค่าทางวิทย์, ย่อเลข, ควบคุมหลักรวม |
| n default | 0 (ถ้าไม่ใส่) | ไม่มี default — ต้องใส่เสมอ |
ถ้าต้องการให้ผลลัพธ์ดูสวยและหลักเท่ากัน (เช่น ราคา) → ใช้ `toFixed()` ถ้าต้องการควบคุมจำนวนหลักทั้งหมดให้พอดี (เช่น ค่าวัดทางวิทยาศาสตร์) → ใช้ `toPrecision()`