ข้ามไปยังเนื้อหาหลัก

ปัดเศษเป็นทศนิยม 2 ตำแหน่งใน Python: อธิบาย 7 วิธี

เรียนรู้การปัดเลขเป็นทศนิยมสองตำแหน่งใน Python ด้วย round(), f-strings, format(), โมดูล decimal, NumPy และอื่น ๆ — พร้อมตารางเปรียบเทียบวิธี
อัปเดตแล้ว 2 มิ.ย. 2569  · 7 นาที อ่าน

การปัดเลขให้เหลือทศนิยมสองตำแหน่งเป็นเทคนิคสำคัญใน Python โดยเฉพาะอย่างยิ่งในงานคำนวณทางการเงิน การนำเสนอข้อมูล และการรายงานทางวิทยาศาสตร์

Python มีหลายวิธีสำหรับการปัดเลขอย่างแม่นยำ ในบทช่วยสอนนี้ จะแสดงวิธีปัดเลขเป็นทศนิยมสองตำแหน่งใน Python โดยใช้ฟังก์ชันในตัว ไลบรารี และวิธีจัดรูปแบบสตริง

หากเพิ่งเริ่มต้นสายงานนักวิเคราะห์ข้อมูล ขอแนะนำคอร์ส Introduction to Python ของ DataCamp เพื่อเรียนพื้นฐาน Python สำหรับการจัดการและแปลงข้อมูล และบทความ Python NumPy tutorial ของเราก็มีประโยชน์ หากต้องปัดอาร์เรย์ตัวเลขขนาดใหญ่ในการทำงานวิเคราะห์ข้อมูล

สรุปสั้น ๆ

  • ใช้ round(number, 2) สำหรับการปัดเชิงคณิตศาสตร์ — ค่าจริงจะเปลี่ยนไป

  • ใช้ f"{number:.2f}" หรือ str.format() เพื่อแสดงผลเท่านั้น — ค่า float เดิมไม่เปลี่ยน

  • ใช้โมดูล decimal เมื่อต้องการความแม่นยำแบบทศนิยมที่ตรงเป๊ะ (เช่น การคำนวณทางการเงิน)

  • ใช้ np.round(array, 2) เพื่อปัดทั้งอาร์เรย์ของ NumPy ในครั้งเดียว

  • ระวังความแม่นยำของ float: round(2.675, 2) จะได้ 2.67 ไม่ใช่ 2.68 เนื่องจากวิธีเก็บ float ในหน่วยความจำ

ทำความเข้าใจการปัดเศษและตำแหน่งทศนิยม

ตำแหน่งทศนิยมหมายถึงตัวเลขที่อยู่ถัดจากจุดทศนิยมของจำนวนหนึ่ง ๆ ตำแหน่งทศนิยมมีความสำคัญเพราะเป็นตัวกำหนดความละเอียดของตัวเลข ยิ่งมีทศนิยมมากก็ยิ่งแม่นยำมาก และในทางกลับกัน

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

Python มีหลายวิธีในการปัดเลขให้เหลือทศนิยมสองตำแหน่ง ตัวอย่างต่อไปนี้มีคำอธิบายอย่างละเอียดของแต่ละเทคนิค

ใช้ round() เพื่อปัดเลขใน Python

ฟังก์ชัน round() เป็นฟังก์ชันในตัวของ Python สำหรับปัดเลขทศนิยมลอยตัวให้เป็นจำนวนตำแหน่งทศนิยมที่ระบุ สามารถกำหนดจำนวนตำแหน่งทศนิยมได้ด้วยอาร์กิวเมนต์ตัวที่สอง ตัวอย่างด้านล่างจะพิมพ์ 34.15

# Example number to be rounded
number = 34.14559

# Rounding the number to 2 decimal places
rounded_number = round(number, 2)

print(rounded_number)

# 34.15

ฟังก์ชัน round() ของ Python ใช้โหมดปัดค่า "round half to even" เป็นค่าเริ่มต้นเมื่อไม่ระบุอาร์กิวเมนต์ตัวที่สอง การปัดแบบ round half to even (bankers’ rounding) คือเมื่อค่าตรงกึ่งกลางระหว่างจำนวนเต็มสองจำนวน จะปัดไปยังจำนวนเต็มที่เป็นเลขคู่ เทคนิคนี้ช่วยลดข้อผิดพลาดสะสมจากการปัดได้

ข้อควรระวังเรื่องความแม่นยำของ float กับ round()

มีรายละเอียดเล็กน้อยที่ควรรู้ก่อนพึ่งพา round() ในโค้ดการเงิน ลองดูตัวอย่างนี้:

print(round(2.675, 2))  # You might expect 2.68
# Output: 2.67

ผลลัพธ์คือ 2.67 ไม่ใช่ 2.68 ค่า 2.675 ไม่สามารถแทนได้อย่างแม่นยำในเลขทศนิยมลอยตัวแบบไบนารี (IEEE 754) ค่าที่เก็บจริงจะน้อยกว่า 2.675 เล็กน้อย จึงถูกปัดลงโดย Python

หากต้องการการปัดที่ตรงเป๊ะสำหรับงานการเงิน ให้ใช้โมดูล decimal พร้อมโหมดการปัดที่ระบุชัดเจน:

from decimal import Decimal, ROUND_HALF_UP

result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result)  # 2.68

ใช้เทคนิคการจัดรูปแบบสตริงเพื่อปัดเลขใน Python

การจัดรูปแบบสตริงมีประโยชน์สำหรับการปัดเลขให้เหลือสองตำแหน่งทศนิยม โดยเฉพาะเมื่อต้องการแสดงผล

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

ปัดด้วยตัวดำเนินการ %

ตัวดำเนินการ % เป็นวิธีดั้งเดิมในการจัดรูปแบบตัวเลขเป็นสองตำแหน่งทศนิยม โดยแทรกค่าลงในช่องว่างของสตริงที่กำหนดรูปแบบไว้

ในตัวอย่างด้านล่าง f ระบุว่าเป็นตัวเลขทศนิยมลอยตัว ส่วน .2 ระบุจำนวนตำแหน่งทศนิยมที่จะปัด

# Example number to be rounded
number = 3.14159

# Using the % operator to round to 2 decimal places
formatted_number = "%.2f" % number

print(formatted_number)

# 3.14

ปัดด้วย str.format()

เมธอด str.format() มีความยืดหยุ่นมากขึ้นสำหรับกรณีการปัดที่ซับซ้อน เพราะใช้ตัวแทนค่าแบบมีชื่อ นักพัฒนามักนิยมวิธีนี้มากกว่าตัวดำเนินการ % ในตัวอย่างด้านล่าง ใช้ :.2f ภายในวงปีกกาเพื่อระบุว่าปัดเป็นสองตำแหน่งทศนิยม โค้ดจะพิมพ์ 3.14

# Example number to be rounded
number = 3.14159

# Using str.format() to round to 2 decimal places
formatted_number = "{:.2f}".format(number)

print(formatted_number)

# 3.14

ปัดด้วย f-strings (Python 3.6+)

f-strings มาตั้งแต่ Python 3.6 และเป็นวิธีที่นิยมที่สุดในการฝังค่าในสตริง ไวยากรณ์ของ f-string เหมาะมากสำหรับการปัด: จัดรูปแบบการแสดงผลได้ในบรรทัดเดียวโดยไม่ต้องเรียกเมธอดแยกต่างหาก โค้ดด้านล่างจะพิมพ์ 14.68

# Example number to be rounded
number = 14.67856

# Using f-strings to round to 2 decimal places
formatted_number = f"{number:.2f}"

print(formatted_number)

# 14.68

ใช้ format() เพื่อปัดเลขใน Python

ฟังก์ชันในตัว format() รับค่าและสเปคการจัดรูปแบบ แล้วคืนค่าเป็นสตริงที่จัดรูปแบบแล้ว แตกต่างจาก str.format() ตรงที่ส่งตัวเลขเข้าไปโดยตรง ไม่ต้องฝังในสตริงเทมเพลต โค้ดด้านล่างจะพิมพ์ 345.69

# Example number to be rounded
number = 345.68776

# Using the built-in format() to round to 2 decimal places
formatted_number = format(number, ".2f")

print(formatted_number)

# 345.69

ใช้โมดูลอื่นเพื่อปัดเลขใน Python

นอกเหนือจาก Python พื้นฐาน ยังมีโมดูลอื่น ๆ ที่ใช้ปัดเลขได้ จะขอยกตัวอย่างหลักสามอย่าง: math, decimal และ NumPy

ปัดด้วยโมดูล math

โมดูล math ไม่มีฟังก์ชันที่ปัดเลขไปยังตำแหน่งทศนิยมที่กำหนดโดยตรง แต่สามารถผสมผสานกับเลขคณิตอื่นเพื่อปัดเหลือสองตำแหน่งทศนิยมได้

ฟังก์ชัน math.floor() ใช้ปัดลงสู่จำนวนเต็มที่ใกล้ที่สุด หากต้องการปัดลงสองตำแหน่งทศนิยม ให้คูณด้วย 100 ใช้ math.floor() แล้วหารด้วย 100 โค้ดด้านล่างจะพิมพ์ 3.14

# Import math module
import math

# Example number to be rounded
number = 3.14159

# Using math.floor() to round down to 2 decimal places
rounded_down = math.floor(number * 100) / 100

print(rounded_down)

# 3.14

ในทำนองเดียวกัน ฟังก์ชัน math.ceil() จะปัดขึ้นสู่จำนวนเต็มที่ใกล้ที่สุด หากต้องการปัดขึ้นสองตำแหน่งทศนิยม ให้คูณด้วย 100 ใช้ math.ceil() แล้วหารด้วย 100 โค้ดด้านล่างจะพิมพ์ 3.15

# Import the math module
import math

# Example number to be rounded
number = 3.14159

# Using math.ceil() to round up to 2 decimal places
rounded_up = math.ceil(number * 100) / 100

print(rounded_up)

# 3.15

ปัดด้วยโมดูล decimal

โมดูล decimal ใน Python มีประโยชน์สำหรับการปัดเลขทศนิยมลอยตัวให้ได้ตำแหน่งทศนิยมที่แม่นยำด้วยเมธอด .quantize() ในตัวอย่างด้านล่าง เรากำหนดความละเอียดเป็น 0.01 เพื่อบอกว่าต้องการปัดเป็นสองตำแหน่งทศนิยม

# Import the decimal module
from decimal import Decimal

# Example number to be rounded
number = Decimal("18.73869")

# Define the rounding precision to 2 decimal places
precision = Decimal('0.01')

# Using the quantize method with ROUND_UP 
# to round the number up to 2 decimal places
rounded_number = number.quantize(precision)

print(rounded_number)

# 18.74

หากกำลังมองหาพฤติกรรมที่ปัดขึ้นโดยเฉพาะ ลองดูบทช่วยสอนล่าสุดของเราเรื่อง How to Round Up a Number in Python เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการใช้โมดูล math และ decimal และเทคนิคอื่น ๆ เพื่อให้แน่ใจว่าปัดขึ้นเสมอ ไม่ใช่ปัดลง หากอยากเข้าใจการแปลงข้อมูลโดยรวมมากขึ้น ลองเรียนเส้นทางอาชีพ Data Analyst with Python เพื่อพัฒนาทักษะการวิเคราะห์

ปัดด้วย NumPy

เมื่อต้องทำงานกับอาร์เรย์ใน NumPy ให้ใช้ np.round() เพื่อปัดทุกองค์ประกอบในครั้งเดียว เร็วกว่าและอ่านง่ายกว่าการวนลูปด้วยตนเอง

import numpy as np

prices = np.array([1.2345, 9.8765, 3.14159])
rounded_prices = np.round(prices, 2)

print(rounded_prices)
# [1.23 9.88 3.14]

np.round() ใช้กฎการปัดแบบ banker's rounding เช่นเดียวกับ round() ในตัวของ Python เมธอด .round() ทำงานแบบเดียวกันบน DataFrame และ Series ของ pandas:

import pandas as pd

df = pd.DataFrame({"price": [1.2345, 9.8765, 3.14159]})
df["price_rounded"] = df["price"].round(2)

print(df)
#      price  price_rounded
# 0   1.2345           1.23
# 1   9.8765           9.88
# 2  3.14159           3.14

หากต้องการภาพรวมกว้าง ๆ ของการแปลงข้อมูลด้วย pandas ดูที่ pandas tutorial ของเรา

ควรใช้วิธีปัดของ Python แบบใดเมื่อไร

สรุปสั้น ๆ สำหรับการเลือกวิธีปัดที่เหมาะสม:

วิธี เหมาะสำหรับ เปลี่ยนค่าเดิมหรือไม่ ชนิดผลลัพธ์
round(x, 2) คณิตศาสตร์ทั่วไป ใช่ float
f"{x:.2f}" การแสดงผล / พิมพ์ ไม่ str
str.format() การแสดงผล / พิมพ์ ไม่ str
% operator การแสดงผล / พิมพ์ (แบบเดิม) ไม่ str
format(x, ".2f") การแสดงผล / ค่าตัวเดียว ไม่ str
math.floor() / ceil() ปัดลงเสมอ / ปัดขึ้นเสมอ ใช่ float
Decimal.quantize() การเงิน / ทศนิยมตรงเป๊ะ ใช่ Decimal
np.round(arr, 2) อาร์เรย์ NumPy ใช่ ndarray

กฎจำง่าย ๆ เพื่อช่วยในการเลือก:

  • ต้องการแค่แสดงตัวเลข? ใช้ f-string (f"{x:.2f}") โค้ดบรรทัดเดียว ไม่ต้อง import และไม่กระทบค่าดั้งเดิม

  • จะคำนวณต่อด้วยผลลัพธ์? ใช้ round(x, 2) จะได้ float สำหรับนำไปคำนวณต่อ

  • โค้ดการเงินหรือบัญชี? ใช้ Decimal.quantize() ปัญหาความแม่นยำของ float (round(2.675, 2) == 2.67) จะไม่เกิดกับโมดูล decimal

  • ต้องปัดขึ้นเสมอหรือปัดลงเสมอ? ใช้ math.ceil() หรือ math.floor() ซึ่งไม่ยึดตามกฎการปัดทั่วไป

  • ทำงานกับอาร์เรย์ NumPy หรือคอลัมน์ pandas? ใช้ np.round(arr, 2) หรือ series.round(2) จัดการทั้งชุดข้อมูลในครั้งเดียว

  • ดูแลโค้ดเก่า? ตัวดำเนินการ % ยังใช้ได้ แต่ f-strings มาแทนตั้งแต่ Python 3.6 แล้ว ควรใช้ในโค้ดใหม่

ข้อคิดส่งท้าย

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

หากอยากยกระดับทักษะ Python ลองดูเส้นทางทักษะ Python Programming ที่ครอบคลุมฟังก์ชัน เดคอเรเตอร์ และแพตเทิร์นขั้นสูง อีกทั้งเส้นทางอาชีพ Python Developer ก็ออกแบบมาเพื่อเสริมทักษะการพัฒนา พร้อมเรียนรู้โครงสร้างข้อมูลและอัลกอริทึมขั้นสูง

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

วิธีที่ง่ายที่สุดในการปัดเลขเป็นสองตำแหน่งทศนิยมใน Python คืออะไร?

วิธีที่ง่ายที่สุดในการปัดเลขให้เหลือสองตำแหน่งทศนิยมคือใช้ฟังก์ชันในตัว round()

ทำไมตัวเลขจึงถูกปัดเป็นจำนวนเต็มที่ใกล้ที่สุดเมื่อใช้ฟังก์ชัน round()?

วิธีปัดเริ่มต้นของฟังก์ชัน round() คือ round half to even หากต้องการปัดเป็นสองตำแหน่งทศนิยม ต้องระบุอาร์กิวเมนต์ตัวที่สองเป็น 2 เช่น round(3.14159, 2)

ใช้ฟังก์ชัน format() อย่างไรในการปัดเลขเป็นสองตำแหน่งทศนิยม?

ฟังก์ชัน format() ใช้สำหรับปัดเลขให้เป็นจำนวนตำแหน่งทศนิยมที่ระบุและแสดงภายในสตริงที่จัดรูปแบบ

round half to even คืออะไร?

วิธีปัดแบบ round half to even หรือ bankers’ rounding คือการปัดค่าที่อยู่กึ่งกลางพอดีระหว่างจำนวนเต็มสองจำนวนไปยังจำนวนเต็มที่เป็นเลขคู่

โมดูล math มีฟังก์ชันปัดเลขเป็นสองตำแหน่งทศนิยมใน Python หรือไม่?

สามารถใช้ math.floor() และ math.ceil() ร่วมกับการคำนวณอื่น เพื่อปัดเลขให้เหลือตำแหน่งทศนิยมตามที่ต้องการได้เท่านั้น

ทำไม round(2.675, 2) จึงได้ 2.67 แทนที่จะเป็น 2.68?

นี่เป็นประเด็นเรื่องความแม่นยำของเลขทศนิยมลอยตัว ค่า 2.675 ไม่สามารถแทนได้อย่างแม่นยำในเลขทศนิยมลอยตัวแบบไบนารี (IEEE 754); ค่าที่เก็บจริงจะน้อยกว่า 2.675 เล็กน้อย จึงถูกปัดลงเป็น 2.67 โดย Python

เพื่อหลีกเลี่ยงปัญหานี้ในโค้ดการเงิน ให้ใช้โมดูล decimal พร้อมโหมดการปัดที่ระบุชัดเจน: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) จะได้ผลลัพธ์เป็น 2.68 ตามที่คาด

จะปัดค่าทั้งหมดใน pandas DataFrame ให้เหลือ 2 ตำแหน่งทศนิยมได้อย่างไร?

ใช้เมธอด .round() กับ DataFrame หรือ Series หากต้องการปัดคอลัมน์เดียว: df["price"] = df["price"].round(2) หากต้องการปัดทุกคอลัมน์ที่เป็นตัวเลขในครั้งเดียว: df = df.round(2).

หัวข้อ

เรียนรู้ Python กับ DataCamp

Courses

Introduction to Python

4 ชม.
6.9M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
ดูรายละเอียดRight Arrow
เริ่มหลักสูตร
ดูเพิ่มเติมRight Arrow