7 ธันวาคม 2557

Published ธันวาคม 07, 2557 by with 0 comment

Decimal Python

บทความนี้จะพาผู้อ่านไปทำความเข้าใจเรื่องการใช้ Decimal หรือเลขทศนิยมใน Python กันครับ
สิ่งหนึ่งที่โปรแกรมเมอร์รู้กันนั้นก็คือคอมพิวเตอร์ใช้เลขฐานสองเป็นภาษาเครื่อง คือ 0 และ 1 ไม่ได้ใช้เลขฐานสิบดังที่มนุษย์ ทำให้การใช้ Decimal หรือเลขทศนิยมในเลขฐานสอง จะไม่ตรงกับเลขทศนิยมในเลขฐานสิบได้ หากเราเขียนโปรแกรมเปรีบเทียบเช่น
>>> print (0.05 + 0.05 == 0.1)
True
จะเห็นได้ว่าได้ผลลัพธ์ที่ต้องการในระดับหนึ่ง แต่ถ้าเราเขียนโปรแกรมที่มีการทำงานวนซ้ำกันจำนวนหลาย ๆ ครั้งมาก ๆ กับเลขทศนิยม เช่น
>>> aa = 0.0
>>> for i in range(1000):
    aa += 0.0001
    print(repr(aa)) 

0.0001
0.0002
0.00030000000000000003

...

0.09980000000000183
0.09990000000000183
0.10000000000000184

>>> print (aa == 1.0)
False
จะเห็นได้ว่าโปรแกรมทำงานไม่ได้ผลลัพธ์ตามที่เราต้องการและออกแบบไว้ หากเราต้องการให้ทำงานเพื่อให้ได้ผลลัพธ์ที่ต้องการ เราต้องทำตามเอกสาร PEP-327 เป็นสเปคของเลขทศนิยมฐานสิบใน Python ทำให้ได้ผลลัพธ์ที่ถูกต้องกว่า อย่าลืม from decimal import Decimal  กันนะครับ เช่น
>>> from decimal import Decimal 
>>> b = Decimal("0.0")
>>> for i in range(1000):
    b += Decimal("0.001")
    print(repr(b))
    
Decimal('0.001')
...
Decimal('1.000') 
>>> print(b == Decimal("1.0"))
True
อ่านรายละเอียดเพิ่มเติมได้ที่ https://docs.python.org/3/library/decimal.html
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)