การปัดเศษของตัวเลข

Haskell:
การปัดเศษของตัวเลข

วิธีการ:

Haskell ใช้ฟังก์ชั่น round, ceiling, floor, และ truncate จาก Prelude สำหรับการปัดเศษ

import Prelude

main :: IO ()
main = do
  let num = 3.567
  print $ round num    -- 4
  print $ ceiling num  -- 4
  print $ floor num    -- 3
  print $ truncate num -- 3
  
  -- การปัดเศษไปยังทศนิยมที่เฉพาะเจาะจงไม่ใช่ส่วนหนึ่งของ Prelude
  -- นี่คือฟังก์ชันที่กำหนดเอง:
  let roundTo n f = (fromInteger $ round $ f * (10^n)) / (10.0^^n)
  print $ roundTo 1 num -- 3.6

การศึกษาลึก

ในอดีต, การปัดเศษมีความสำคัญในการวิเคราะห์เชิงตัวเลขและวิทยาการคอมพิวเตอร์ เพราะเป็นสิ่งที่สำคัญในการลดการสะสมข้อผิดพลาดในการคำนวณ โดยเฉพาะก่อนที่การแทนค่าจุดลอยตัวจะมีการมาตรฐานสากลตาม IEEE 754

ควรปัดเศษไปยังอะไร? round จะนำคุณไปยังจำนวนเต็มที่ใกล้ที่สุด—ขึ้นหรือลง ceiling และ floor จะปัดเศษขึ้นหรือลงไปยังจำนวนเต็มที่ใกล้ที่สุดตามลำดับ ขณะที่ truncate เพียงแค่ตัดทศนิยมทิ้ง

ตัวเลือกอื่นๆ นอกเหนือจากฟังก์ชันเหล่านี้อาจเกี่ยวข้องกับตรรกะที่กำหนดเอง เช่น roundTo ของเรา หรือคุณอาจใช้ไลบรารี (เช่น Data.Fixed) สำหรับความต้องการที่ซับซ้อนมากขึ้น

ระวังผลลัพธ์ที่ไม่คาดคิดเนื่องจากวิธีที่ Haskell จัดการกับกรณีครึ่งทางใน round (มันปัดเศษไปยังจำนวนคู่ที่ใกล้ที่สุด)

ดูเพิ่มเติม