Output with precision 5

This commit is contained in:
VegOwOtenks 2024-09-15 17:58:53 +02:00
parent b4bbd298a0
commit e38576c1d8

View file

@ -2,16 +2,31 @@ module Main (main) where
import Text.Parsec import Text.Parsec
import Lib (exprparser, evaluate) import Lib (exprparser, evaluate, replaceVars)
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Ratio
import System.IO import System.IO
main :: IO () main :: IO ()
main = ioLoop main = ioLoop
useResult (Right e) = show . evaluate $ e precision = 5 :: Int
showRatio :: Int -> Rational -> String
showRatio p r = (if (r < 0) then "-" else "") ++ prepoint_digits ++ "." ++ postpoint_digits
where
prepoint_digits = init . show . round $ (r * 10)
postpoint_digits = (take p) . (drop (length prepoint_digits)) . show . round $ (r * 10^p)
useResult (Right e) = (showRatio precision) . evaluate $ replaceVars e vars
useResult (Left e) = show e useResult (Left e) = show e
vars :: Map String Rational
vars = Map.fromList [("pi", 245850922 % 78256779), ("e", 271801 % 99990)]
ioLoop :: IO () ioLoop :: IO ()
ioLoop = do done <- isEOF ioLoop = do done <- isEOF
if done if done