Haskell:
Avrundning av tal

Hur man gör:

Haskell använder funktionerna round, ceiling, floor och truncate från Prelude för avrundningsoperationer.

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
  
  -- Avrundning till en specifik decimalplats finns inte i Prelude.
  -- Här är en anpassad funktion:
  let roundTo n f = (fromInteger $ round $ f * (10^n)) / (10.0^^n)
  print $ roundTo 1 num -- 3.6

Djupdykning

Historiskt är avrundning betydande inom numerisk analys och datavetenskap eftersom det är avgörande för att minimera ackumulering av fel i beräkningar, särskilt innan representationer av flyttal standardiserades med IEEE 754.

Vad ska man avrunda till? round tar dig till närmaste heltal—upp eller ner. ceiling och floor avrundar alltid upp eller ner till det närmaste heltalet, medan truncate helt enkelt släpper decimalerna.

Alternativ till dessa funktioner kan innebära anpassad logik, som vår roundTo, eller du kanske drar in bibliotek (som Data.Fixed) för mer komplexa krav.

Se upp för oväntade resultat på grund av hur Haskell hanterar halvvägs-fall i round (den avrundar till det närmaste jämna talet).

Se Också