สำหรับคำนวณเลขทศนิยมจุดลอยตัว Python มีโมดูล decimal ซึ่งมีฟังก์ชันมากมายสำหรับการคำนวณทศนิยมที่แม่นยำ นี่คือฟังก์ชันสำคัญและใช้บ่อย
compare()
เปรียบเทียบเลขทศนิยม คืนค่า 1 ถ้าตัวแรกมากกว่า -1 ถ้าน้อยกว่า 0 ถ้าเท่ากัน
โค้ดตัวอย่าง
import decimal
val1 = decimal.Decimal(2.6)
val2 = decimal.Decimal(2.61)
print("The result is:", val1.compare(val2))
val1 = decimal.Decimal(2.6)
val2 = decimal.Decimal(-2.6)
print("The result is:", val1.compare(val2))
val1 = decimal.Decimal(2.6)
val2 = decimal.Decimal(2.6)
print("The result is:", val1.compare(val2))
ผลลัพธ์
The result is: -1
The result is: 1
The result is: 0
max() และ min()
หาค่าสูงสุดและต่ำสุดของเลขทศนิยมสองค่า
โค้ดตัวอย่าง
import decimal
val1 = decimal.Decimal(2.6)
val2 = decimal.Decimal(2.61)
print("The max value is:", round(val1.max(val2), 2))
print("The min value is:", round(val1.min(val2), 2))
ผลลัพธ์
The max value is: 2.61
The min value is: 2.60
getcontext()
เปลี่ยนความแม่นยำ (precision) ของการคำนวณ ค่าเริ่มต้นคือ 28 หลัก
โค้ดตัวอย่าง
from decimal import *
print(Decimal(13) / Decimal(7))
getcontext().prec = 6
print(Decimal(13) / Decimal(7))
getcontext().prec = 10
print(Decimal(13) / Decimal(7))
ผลลัพธ์
1.857142857142857142857142857
1.85714
1.857142857
exp()
คำนวณค่าเลขยกกำลังธรรมชาติ e**x
โค้ดตัวอย่าง
from decimal import *
print(Decimal(1).exp())
print(Decimal(2).exp())
print(Decimal(4).exp())
ผลลัพธ์
2.718281828459045235360287471
7.389056098930650227230427461
54.59815003314423907811026120
as_integer_ratio()
หาจำนวนเต็มสองจำนวนที่หารกันได้ทศนิยมนั้น
โค้ดตัวอย่าง
from decimal import *
v = Decimal('2.1834').as_integer_ratio()
print(v)
v = Decimal('-1.92').as_integer_ratio()
print(v)
ผลลัพธ์
(10917, 5000)
(-48, 25)
ln() และ log10()
คำนวณลอการิทึมธรรมชาติ (ฐาน e) และลอการิทึมฐาน 10
โค้ดตัวอย่าง
from decimal import *
ln_val = Decimal('2.1').ln()
print(ln_val)
log_val = Decimal('2.1').log10()
print(log_val)
ผลลัพธ์
0.7419373447293773124826065257
0.3222192947339192680072441618
fma(a, b) - Fused Multiply Add
คูณค่าทศนิยมกับ a แล้วบวก b (คำนวณในขั้นตอนเดียวลดข้อผิดพลาดปัดเศษ)
โค้ดตัวอย่าง
from decimal import *
# (2.1 * 2) + 5
fma_val = Decimal(2.1).fma(2, 5)
print(fma_val)
# (8.1 * 3) + 5
fma_val = Decimal(8.1).fma(3, 5)
print(fma_val)
ผลลัพธ์
9.200000000000000177635683940
29.29999999999999893418589636