diff --git a/Text/Show/Pragmatic.hs b/Text/Show/Pragmatic.hs
--- a/Text/Show/Pragmatic.hs
+++ b/Text/Show/Pragmatic.hs
@@ -17,6 +17,7 @@
 
 import Data.Int (Int8, Int16, Int32, Int64)
 import Data.Word (Word8, Word16, Word32, Word64)
+import Data.Ratio
 #if MIN_VERSION_base(4,8,0)
 import Numeric.Natural (Natural)
 #endif
@@ -481,9 +482,12 @@
                   = (hd:) . ("e"++) . shows (e₁₀-1)
     | (hd:qd@(_:_)) <- rDigits
                   = (hd:) . ('.':) . (qd++) . ("e"++) . shows (e₁₀-1)
-   where e₁₀ = ceiling $ logBase 10 n
-         m₁₀Approx = round $ n * 10^^(precision+2 - e₁₀) :: Int
-         (rApprZeroes, rDigits') = break (>'0') . reverse $ show m₁₀Approx
+   where (e₁₀,m₁₀Approx) = correctPrecision . ceiling $ logBase 10 n
+          where correctPrecision e
+                 = case show (round $ n * 10^^(precision+2 - e) :: Int) of
+                     digits | length digits <= precision+2  -> (e,digits)
+                            | otherwise                     -> correctPrecision $ e+1
+         (rApprZeroes, rDigits') = break (>'0') . reverse $ m₁₀Approx
          rDigits = reverse rDigits'
          lrDigs = length rDigits
 
@@ -498,3 +502,19 @@
   showsPrec _ (a,b,c,d) = ('(':)
            . shows a . (',':) . shows b . (',':) . shows c . (',':) . shows d
                         . (')':)
+
+instance (Integral i, Show i) => Show (Ratio i) where
+  showsPrec p n
+   | n<0                 = showParen (p>5) $ ('-':) . showsPrec 6 (-n)
+   | denominator n == 1  = shows $ numerator n
+   | otherwise           = showParen (p>6) $ shows (numerator n)
+                                              . ('/':) . shows (denominator n)
+
+-- | Drop-in for the standard screen-displaying function. This is useful as a GHCi
+--   evaluation action; invoke with
+-- @
+-- $ ghci -interactive-print=Text.Show.Pragmatic.print
+-- @
+--   to get more concise output from the REPL.
+print :: Show a => a -> IO ()
+print = putStrLn . show
diff --git a/pragmatic-show.cabal b/pragmatic-show.cabal
--- a/pragmatic-show.cabal
+++ b/pragmatic-show.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                pragmatic-show
-version:             0.1.0.2
+version:             0.1.1.0
 synopsis:            Alternative Show class that gives shorter view if possible.
 description:         The standard 'Show' class is handy for quickly viewing any Haskell
                      values without having to think about formatting. However, it often
diff --git a/test/tasty/test.hs b/test/tasty/test.hs
--- a/test/tasty/test.hs
+++ b/test/tasty/test.hs
@@ -40,7 +40,12 @@
          $ readBackEq ([]::[(Int,Integer,(Char,[Int]),String)])
    ]
   , testGroup "Showing double-precision floats"
-   [ floatTest pi "3.14159265359"
+   [ floatTest 1 "1"
+   , floatTest 10 "10"
+   , floatTest 0.1 "0.1"
+   , floatTest 1e9 "1e9"
+   , floatTest 1e90 "1e90"
+   , floatTest pi "3.14159265359"
    , floatTest 32 "32"
    , floatTest (89.524 - 9.004) "80.52"
    , floatTest (0.3 + 0.3 + 0.3) "0.9"
@@ -48,6 +53,7 @@
                (0.3 + 0.3 + 0.3)@?="0.8999999999999999"
    , floatTest 325124 "325124"
    , floatTest 325124.512 "3.25124512e5"
+   , floatTest 0.999999999 "0.999999999"
    , floatTest 1.52464e8 "1.52464e8"
    , floatTest (1.52464e8 + 1) "1.52464001e8"
    , floatTest (1.52464e8 + 1e-5) "1.52464e8"
@@ -65,6 +71,14 @@
    , testProperty "Double²" $ readBackApproxEq ([]::[(Double,Double)]) 1e-10
    , testProperty "Float" $ readBackApproxEq ([]::[Float]) 1e-5
    ]
+  , testGroup "Showing rational numbers"
+   [ rationalTest 0 "0"
+   , rationalTest 32 "32"
+   , rationalTest (3/2) "3/2"
+   , rationalTest (2/3) "2/3"
+   , rationalTest (-268/19) "-268/19"
+   , rationalTest (3/3) "1"
+   ]
   ]
 
 -- | Check that showing and reading again yields the original value.
@@ -85,3 +99,6 @@
 
 floatTest :: Double -> String -> TestTree
 floatTest n s = testCase s $ show n @?= s
+
+rationalTest :: Rational -> String -> TestTree
+rationalTest n s = testCase s $ show n @?= s
