diff --git a/fraction.cabal b/fraction.cabal
--- a/fraction.cabal
+++ b/fraction.cabal
@@ -1,5 +1,5 @@
 Name:          fraction
-Version:       0.0.0.0
+Version:       0.0.1.0
 Cabal-Version: >= 1.2
 Build-Type:    Simple
 License:       BSD3
diff --git a/src/Data/Fraction.hs b/src/Data/Fraction.hs
--- a/src/Data/Fraction.hs
+++ b/src/Data/Fraction.hs
@@ -12,8 +12,10 @@
     -- * Conversion
     fromFactor,
     fromPercentage,
+    fromNumber,
     toFactor,
-    toPercentage
+    toPercentage,
+    toNumber
 
 ) where
 
@@ -41,19 +43,34 @@
 
         If the factor is not from the interval [0,1], a runtime error occurs.
     -}
-    fromFactor :: Double -> Fraction
-    fromFactor factor | factor >= 0 && factor <= 1 = Fraction factor
-                      | otherwise                  = error "fraction: factor out of bounds"
+    fromFactor :: (Real real) => real -> Fraction
+    fromFactor = fromNumber (0,1)
 
     {-|
         Converts a percentage into its corresponding fraction.
 
         If the percentage is not from the interval [0,100], a runtime error occurs.
     -}
-    fromPercentage :: Double -> Fraction
-    fromPercentage perc | perc >= 0 && perc <= 100 = Fraction (perc / 100)
-                        | otherwise                = error "fraction: percentage out of bounds"
+    fromPercentage :: (Real real) => real -> Fraction
+    fromPercentage = fromNumber (0,100)
 
+    {-|
+        Converts a number into its corresponding fraction regarding a certain interval.
+
+        If the lower bound of the interval is equal to or greater than the upper bound or the value
+        is not from the interval, a runtime error occurs.
+    -}
+    fromNumber :: (Real real) => (real,real) -> real -> Fraction
+    fromNumber (lower,upper) real = checkInterval (lower,upper) `seq`
+                                    if lower <= real && real <= upper
+                                        then Fraction $
+                                             (realToFrac real - fracMin) / (fracMax - fracMin)
+                                        else error "fraction: real out of bounds" where
+
+        fracMin = realToFrac lower
+
+        fracMax = realToFrac upper
+
     -- |Converts a fraction into its corresponding factor.
     toFactor :: Fraction -> Double
     toFactor (Fraction factor) = factor
@@ -61,4 +78,18 @@
     -- |Converts a fraction into its corresponding percentage.
     toPercentage :: Fraction -> Double
     toPercentage (Fraction factor) = factor * 100
+
+    {-|
+        Converts a fraction into its corresponding number regarding a certain interval.
+
+        If the lower bound of the interval is equal to or greater than the upper bound, a runtime
+        error occurs.
+    -}
+    toNumber :: (Double,Double) -> Fraction -> Double
+    toNumber (lower,upper) (Fraction factor) = checkInterval (lower,upper) `seq`
+                                               factor * (upper - lower) + lower
+
+    checkInterval :: (Real real) => (real,real) -> ()
+    checkInterval (lower,upper) | lower < upper = ()
+                                | otherwise     = error "fraction: no proper interval"
 
