diff --git a/network-bitcoin.cabal b/network-bitcoin.cabal
--- a/network-bitcoin.cabal
+++ b/network-bitcoin.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.1.3
+Version:             0.1.4
 
 -- A short (one-line) description of the package.
 Synopsis:            Interface with Bitcoin RPC
@@ -28,13 +28,9 @@
     .
     To learn more about Bitcoin, see <http://www.bitcoin.org>.
     .
-    Changes in v0.1.3
-    .
-    - Be more lenient when accepting addresses
-    .
-    - Support testnet addresses
+    Changes in v0.1.4
     .
-    - Add FlexibleInstances for GHC 7.2
+    - More accurate conversion of Bitcoin amounts from floating point
 
 -- The license under which the package is released.
 License:             BSD3
@@ -65,7 +61,7 @@
 -- Extra-source-files:  
 
 -- Constraint on the version of Cabal needed to build this package.
-Cabal-version:       >=1.6
+Cabal-version:       >=1.8
 
 
 Library
@@ -79,13 +75,13 @@
   
   -- Packages needed in order to build this package.
   Build-depends:       
-    aeson == 0.3.*,
-    attoparsec >= 0.7 && < 0.10,
-    bytestring == 0.9.*,
-    containers == 0.4.*,
-    HTTP == 4000.*,
-    network == 2.3.*,
-    text == 0.11.*,
+    aeson >= 0.3,
+    attoparsec >= 0.7,
+    bytestring >= 0.9,
+    containers >= 0.4,
+    HTTP >= 4000,
+    network >= 2.3,
+    text >= 0.11,
     base == 4.*
   
   -- Modules not exported by this package.
@@ -93,6 +89,10 @@
   
   -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
   -- Build-tools:         
+
+Test-suite test-main
+    type: exitcode-stdio-1.0
+    main-is: test-main.hs
   
 Source-repository head
     type: git
diff --git a/src/Network/Bitcoin.hs b/src/Network/Bitcoin.hs
--- a/src/Network/Bitcoin.hs
+++ b/src/Network/Bitcoin.hs
@@ -17,6 +17,7 @@
     , isMine
     , account
     , BitcoinException(..)
+    , Satoshi(..)
 
     -- * Individual API methods
     , getBalance
@@ -32,6 +33,8 @@
 
     -- * Low-level API
     , callApi
+    , FromNumber
+    , fromNumber
     ) where
 import Network.Bitcoin.Address
 
@@ -43,6 +46,7 @@
 import Data.Attoparsec.Number
 import Data.Fixed
 import Data.Maybe (fromJust)
+import Data.Ratio ((%))
 import Data.String (fromString)
 import Data.Typeable
 import Network.Browser
@@ -53,10 +57,12 @@
 import qualified Data.Map as M
 import qualified Data.Text as T
 
--- Define Bitcoin's internal precision
+-- | Defines Bitcoin's internal precision
+satoshis :: Integer
+satoshis = 10^(8::Integer)
 data Satoshi = Satoshi
 instance HasResolution Satoshi where
-    resolution _ = 10^(8::Integer)
+    resolution _ = satoshis
 
 -- | Fixed precision Bitcoin amount (to avoid floating point errors)
 type Amount = Fixed Satoshi
@@ -167,12 +173,14 @@
           msg  = find "message" o
 buildBtcError _ = error "Need an object to buildBtcError"
 
--- Convert JSON numeric values to more specific numeric types
+-- | Convert JSON numeric values to more specific numeric types
 class FromNumber a where
     fromNumber :: Number -> a
 instance FromNumber Amount where
     fromNumber (I i) = fromInteger i
-    fromNumber (D d) = fromRational $ toRational d
+    fromNumber (D d) = fromRational $ numerator % satoshis
+      where
+        numerator = round $ d * (fromInteger satoshis)
 instance FromNumber Integer where
     fromNumber (I i) = i
     fromNumber (D d) = round d
