Haskell:
Làm tròn số

Cách thực hiện:

Haskell sử dụng các hàm round, ceiling, floortruncate từ Prelude để thực hiện làm tròn.

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
  
  -- Làm tròn đến một chỗ thập phân cụ thể không có trong Prelude.
  -- Đây là một hàm tự tạo:
  let roundTo n f = (fromInteger $ round $ f * (10^n)) / (10.0^^n)
  print $ roundTo 1 num -- 3.6

Tìm hiểu sâu

Trong lịch sử, làm tròn số có ý nghĩa quan trọng trong phân tích số và khoa học máy tính vì nó là chìa khóa để giảm thiểu sự tích lũy sai số trong các tính toán, đặc biệt là trước khi biểu diễn số dấu phẩy động được tiêu chuẩn hóa với IEEE 754.

Nên làm tròn đến đâu? round đưa bạn đến số nguyên gần nhất—lên hoặc xuống. ceilingfloor luôn làm tròn lên hoặc xuống đến số nguyên gần nhất, tương ứng, trong khi truncate đơn giản là bỏ qua phần thập phân.

Các lựa chọn thay thế cho những hàm này có thể bao gồm lô-gic tùy chỉnh, như roundTo của chúng tôi, hoặc bạn có thể tải các thư viện (như Data.Fixed) cho các yêu cầu phức tạp hơn.

Hãy cẩn thận với kết quả không mong đợi do cách Haskell xử lý các trường hợp nửa chừng trong round (nó làm tròn đến số chẵn gần nhất).

Xem thêm