diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.0.8
+
+* Add `amountReal`
+
 0.0.7
 
 * Add `diffDates`
diff --git a/national-australia-bank.cabal b/national-australia-bank.cabal
--- a/national-australia-bank.cabal
+++ b/national-australia-bank.cabal
@@ -1,5 +1,5 @@
 name:                 national-australia-bank
-version:              0.0.7
+version:              0.0.8
 synopsis:             Functions for National Australia Bank transactions
 description:          Parsing, Processing and other functions for National Australia Bank transactions
 license:              BSD3
diff --git a/src/Data/Bank/NationalAustraliaBank/NationalAustraliaBank.hs b/src/Data/Bank/NationalAustraliaBank/NationalAustraliaBank.hs
--- a/src/Data/Bank/NationalAustraliaBank/NationalAustraliaBank.hs
+++ b/src/Data/Bank/NationalAustraliaBank/NationalAustraliaBank.hs
@@ -41,7 +41,7 @@
 import Data.Validation ( toEither )
 import Data.Time ( fromGregorian, toGregorian, diffDays, Day )
 import Data.Functor.Contravariant ( Contravariant(contramap) )
-import Data.Ratio ( Ratio, (%) )
+import Data.Ratio ( Ratio, (%), numerator )
 import System.Directory
     ( doesDirectoryExist,
       listDirectory )
@@ -53,7 +53,7 @@
       ParsecT,
       Stream )
 
--- #setup
+-- $setup
 -- >>> import Data.Digit
 
 data Month =
@@ -458,6 +458,39 @@
 realAmount a =
   integralAmount100 a % 100
 
+-- |
+--
+-- >>> amountReal 0
+-- Amount {_negated = False, _dollars = DecDigit0 :| [], _cents1 = DecDigit0, _cents2 = DecDigit0}
+--
+-- >>> amountReal 0.01
+-- Amount {_negated = False, _dollars = DecDigit0 :| [], _cents1 = DecDigit0, _cents2 = DecDigit1}
+--
+-- >>> amountReal 0.0123
+-- Amount {_negated = False, _dollars = DecDigit1 :| [], _cents1 = DecDigit2, _cents2 = DecDigit3}
+--
+-- >>> amountReal (-0.01)
+-- Amount {_negated = True, _dollars = DecDigit0 :| [], _cents1 = DecDigit0, _cents2 = DecDigit1}
+--
+-- >>> amountReal (-0.0123)
+-- Amount {_negated = True, _dollars = DecDigit1 :| [], _cents1 = DecDigit2, _cents2 = DecDigit3}
+--
+-- >>> amountReal (-12.01)
+-- Amount {_negated = True, _dollars = DecDigit1 :| [DecDigit2], _cents1 = DecDigit0, _cents2 = DecDigit1}
+--
+-- >>> > amountReal (452.99)
+-- Amount {_negated = False, _dollars = DecDigit4 :| [DecDigit5,DecDigit2], _cents1 = DecDigit9, _cents2 = DecDigit9}
+amountReal ::
+  Integral a =>
+  Ratio a
+  -> Amount
+amountReal r =
+  let div10 x = over _2 (fromMaybe DecDigit0 . preview integralDecimal) (divMod x 10)
+      n = numerator (r * 100)
+      (as1, c2) = div10 (abs n)
+      (as2, c1) = div10 as1
+  in  Amount (n < 0) (either id id (integralDecDigits as2)) c1 c2
+
 integralAmount100 ::
   Integral a =>
   Amount
@@ -488,12 +521,7 @@
 -- Amount {_negated = False, _dollars = DecDigit2 :| [DecDigit2], _cents1 = DecDigit3, _cents2 = DecDigit2}
 instance Semigroup Amount where
   a1 <> a2 =
-    let div10 x = over _2 (fromMaybe DecDigit0 . preview integralDecimal) (divMod x 10)
-        v :: Integer
-        v = integralAmount100 a1 + integralAmount100 a2
-        (as1, c2) = div10 (abs v)
-        (as2, c1) = div10 as1
-    in  Amount (v < 0) (either id id (integralDecDigits as2)) c1 c2
+    amountReal (realAmount a1 + realAmount a2 :: Ratio Integer)
 
 instance Monoid Amount where
   mempty =
