สิ่งหนึ่งที่โปรแกรมเมอร์รู้กันนั้นก็คือคอมพิวเตอร์ใช้เลขฐานสองเป็นภาษาเครื่อง คือ 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 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)