diff --git tests/userpoints_api.test tests/userpoints_api.test
index 0d73a56..2c4e635 100644
--- tests/userpoints_api.test
+++ tests/userpoints_api.test
@@ -38,7 +38,7 @@ class UserpointsTestCase extends DrupalWebTestCase {
    */
   function testBasicCall() {
     global $user;
-    $points = (int) rand(1, 500);
+    $points = rand(1, 500);
     $sumpoints = $points;
 
     //NOTE: increment max points with all positive point changes, tests userpoints_get_max_points
@@ -49,15 +49,15 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->assertTrue($return['status'] == TRUE , t('API responded with successful grant of points'));
 
     //Check the database to ensure the point were properly saved
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
-    $this->assertTrue($db_points === $points, t('Successfully verified points in the txn table'));
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %f";
+    $db_points = (float) db_result(db_query($sql, $user->uid, $points));
+    $this->assertTrue(round($db_points) === $points, t('Successfully verified points in the txn table'));
 
     //Check that the transaction table and the summary table match
     $sql = "SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d";
-    $txn_points = (int) db_result(db_query($sql, $user->uid));
+    $txn_points = (float) db_result(db_query($sql, $user->uid));
     $sql = "SELECT SUM(points) from {userpoints} WHERE uid = %d";
-    $up_points = (int) db_result(db_query($sql, $user->uid));
+    $up_points = (float) db_result(db_query($sql, $user->uid));
     $this->assertTrue($txn_points === $up_points, t('Sum of transactions match total points for user'));
 
     //Add negative points to the initial value and check the values
@@ -66,9 +66,9 @@ class UserpointsTestCase extends DrupalWebTestCase {
     userpoints_userpointsapi($points);
 
     //Check the database to ensure the negative point value was properly saved
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
-    $this->assertTrue($db_points === $points, t('Successfully verified negative points in the txn table'));
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %f";
+    $db_points = (float) db_result(db_query($sql, $user->uid, $points));
+    $this->assertTrue(round($db_points) === $points, t('Successfully verified negative points in the txn table'));
 
 
     //Now test to make sure the transaction and and caching table stay in sync.
@@ -89,13 +89,13 @@ class UserpointsTestCase extends DrupalWebTestCase {
 
     //Check the summary table to make sure everything is still kosher.
     $sql = "SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d";
-    $txn_points = (int) db_result(db_query($sql, $user->uid));
+    $txn_points = (float) db_result(db_query($sql, $user->uid));
 
     $sql = "SELECT SUM(points) from {userpoints} WHERE uid = %d";
-    $up_points = (int) db_result(db_query($sql, $user->uid));
+    $up_points = (float) db_result(db_query($sql, $user->uid));
 
     $this->assertTrue($txn_points === $up_points, t('Sum of transactions matches the caching table'));
-    $this->assertTrue($up_points === $sumpoints,
+    $this->assertTrue(round($up_points) === $sumpoints,
       t('Caching table matches testing code after !recs point records totaling !points points',
       array('!recs' => $i, '!points' => $sumpoints ))
     );
@@ -128,9 +128,9 @@ class UserpointsTestCase extends DrupalWebTestCase {
     );
 
     //Check the Database to make sure the points made it there
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %f";
     $db_points = db_result(db_query($sql, $user->uid, $points));
-    $this->assertTrue($db_points == $points, t('Successfully verified points in the txn table'));
+    $this->assertTrue(round($db_points) == $points, t('Successfully verified points in the txn table'));
 
     //Test to ensure that calling it with no points returns FALSE indicating an error
     $params = array(
@@ -161,9 +161,9 @@ class UserpointsTestCase extends DrupalWebTestCase {
     );
 
     //Check the Database to make sure the points made it there
-    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %d";
+    $sql = "SELECT points from {userpoints_txn} WHERE uid = %d AND points = %f";
     $db_points = db_result(db_query($sql, $admin_user->uid, $points));
-    $this->assertTrue($db_points == $points, t('Successfully verified points in the txn table'));
+    $this->assertTrue(round($db_points) == $points, t('Successfully verified points in the txn table'));
 
 
     //Attempt to award points to a non-existent user
@@ -249,8 +249,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
       $this->assertTrue($return['status'] == TRUE,
         t($time['string'] ." API responded with a successful grant of points"));
       /* Check the database to ensure the points were properly saved */
-      $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND expirydate = %d";
-      $db_points = (int) db_result(db_query($sql, $user->uid, $points, $time['time']));
+      $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %f AND expirydate = %d";
+      $db_points = (float) db_result(db_query($sql, $user->uid, $points, $time['time']));
       $this->assertTrue($db_points == $points,
         t($time['string'] ."Successfully verified points in the txn table.") );
       if ($db_points == $points) {
@@ -259,7 +259,7 @@ class UserpointsTestCase extends DrupalWebTestCase {
 
       /* Check update point to 'userpoints' table */
       $sql1 = "SELECT points FROM {userpoints} WHERE uid=%d";
-      $db_points = (int) db_result(db_query($sql1, $user->uid));
+      $db_points = (float) db_result(db_query($sql1, $user->uid));
       $this->assertTrue($db_points == $sum_points,
         t($time['string'] ."Successfully verified that the summary table was updated")
       );
@@ -303,11 +303,11 @@ class UserpointsTestCase extends DrupalWebTestCase {
 
     /* Check the user points removed or not if the point was expiration */
     $sql = "SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d";
-    $db_points = (int) db_result(db_query($sql, $user->uid));
+    $db_points = (float) db_result(db_query($sql, $user->uid));
     $this->assertTrue($db_points == $keep_points, t("Successfully removed expired points from the txn table.") );
 
     $sql = "SELECT points FROM {userpoints} WHERE uid=%d";
-    $db_points = (int) db_result(db_query($sql, $user->uid));
+    $db_points = (float) db_result(db_query($sql, $user->uid));
     $this->assertTrue($db_points == $keep_points, t("Successfully removed expired points from the summary table.") );
 
     // Load the expiry transaction from the database and verify that it does
@@ -414,8 +414,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->drupalPost('admin/user/userpoints/add', $edit, 'Save');
 
     /* check database */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%d";
-    $db_points = (int)db_result(db_query($sql, $admin_user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%f";
+    $db_points = (float)db_result(db_query($sql, $admin_user->uid, $points));
     $this->assertTrue($db_points == $points, t("Successful verified that points were added into database."));
 
     /* logout and change user */
@@ -445,8 +445,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
 */
 
     /* check database */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%d";
-    $db_points = (int)db_result(db_query($sql, $view_user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid=%d AND points=%f";
+    $db_points = (float)db_result(db_query($sql, $view_user->uid, $points));
     $this->assertTrue($db_points != $points, t("Successful verified that points do not add into database."));
     $this->drupalLogout();
   }
@@ -466,13 +466,13 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->assertTrue($return['status'] == TRUE , t("1. (moderate=TRUE) API responded with successful grant of points"));
 
     /* Check the database to ensure the point were properly saved */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND status = 1";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %f AND status = 1";
+    $db_points = (float) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points, t("1. (moderate=TRUE) Successfully verified points in the txn table and waiting moderation.") );
 
     /* Check do not update point to 'userpoints' table */
     $sql1 = "SELECT points FROM {userpoints} WHERE uid=%d";
-    $db_points = (int) db_result(db_query($sql1, $user->uid));
+    $db_points = (float) db_result(db_query($sql1, $user->uid));
     $this->assertTrue($db_points == 0, t("1. (moderate=TRUE) Successfully verified that points were added and the summary table was not updated.") );
 
 /*
@@ -485,12 +485,12 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $return = userpoints_userpointsapi($params);
     $this->assertTrue($return['status'] == TRUE , t("6. (moderate=NULL) API responded with successful grant of points"));
 
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND status = 1";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %f AND status = 1";
+    $db_points = (float) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points,t("6. (moderate=NULL) Successfully verified points in the txn table and waiting moder.") );
 
     $sql1 = "SELECT points FROM {userpoints} WHERE uid=%d";
-    $db_points = (int) db_result(db_query($sql1, $user->uid));
+    $db_points = (float) db_result(db_query($sql1, $user->uid));
     $this->assertTrue($db_points == 0,t("6. (moderate=NULL) Successfully, Points added and does not modify summary table.") );
 
 */
@@ -506,8 +506,8 @@ class UserpointsTestCase extends DrupalWebTestCase {
     $this->assertTrue($return['status'] == TRUE , t("7. (moderate=FALSE) API responded with successful grant of points"));
 
     /* Check the database to ensure the point were properly saved */
-    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %d AND status = 0";
-    $db_points = (int) db_result(db_query($sql, $user->uid, $points));
+    $sql = "SELECT points FROM {userpoints_txn} WHERE uid = %d AND points = %f AND status = 0";
+    $db_points = (float) db_result(db_query($sql, $user->uid, $points));
     $this->assertTrue($db_points == $points, t("7. (moderate=FALSE) Successfully verified points in the txn table and NOT waiting moderation.") );
   }
 
diff --git userpoints.install userpoints.install
index c290f48..652b227 100644
--- userpoints.install
+++ userpoints.install
@@ -22,13 +22,13 @@ function userpoints_schema() {
       ),
       'points' => array(
         'description' => 'Current Points',
-        'type' => 'int',
+        'type' => 'float',
         'not null' => TRUE,
         'default' => 0,
       ),
       'max_points' => array(
         'description' => 'Out of a maximum points',
-        'type' => 'int',
+        'type' => 'float',
         'not null' => TRUE,
         'default' => 0,
       ),
@@ -74,7 +74,7 @@ function userpoints_schema() {
       ),
       'points' => array(
         'description' => 'Points',
-        'type' => 'int',
+        'type' => 'float',
         'not null' => TRUE,
         'default' => 0,
       ),
@@ -281,3 +281,15 @@ function userpoints_update_6012() {
   db_add_index($ret, 'userpoints_txn', 'status_expired_expiry', array('status', 'expired', 'expirydate'));
   return $ret;
 }
+
+/**
+ * Change points from int to float
+ */
+function userpoints_update_6013() {
+  $ret = array();
+  db_change_field($ret, 'userpoints_txn', 'points', 'points', array('type' => 'float', 'not null' => true, 'default' => 0));
+  db_change_field($ret, 'userpoints', 'points', 'points', array('type' => 'float', 'not null' => true, 'default' => 0));
+  db_change_field($ret, 'userpoints', 'max_points', 'max_points', array('type' => 'float', 'not null' => true, 'default' => 0));
+  return $ret;
+}
+
diff --git userpoints.module userpoints.module
index 3f38b60..460be11 100644
--- userpoints.module
+++ userpoints.module
@@ -34,6 +34,8 @@ define('USERPOINTS_REPORT_USERCOUNT', 'userpoints_report_usercount');
 define('USERPOINTS_REPORT_LIMIT', 'userpoints_report_limit');
 define('USERPOINTS_REPORT_DISPLAYZERO', 'userpoints_report_displayzero');
 
+define('USERPOINTS_PRECISION_NUM', 'userpoints_precision_num');
+
 define('USERPOINTS_CATEGORY_NAME', 'Userpoints');
 define('USERPOINTS_CATEGORY_DEFAULT_VID', 'userpoints_category_default_vid');
 define('USERPOINTS_CATEGORY_DEFAULT_TID', 'userpoints_category_default_tid');
@@ -218,6 +220,11 @@ function userpoints_theme() {
         'rows' => NULL,
         ),
     ),
+    'userpoints_points' => array(
+      'arguments' => array(
+	    'points' => NULL,
+	    ),
+    ),
   ); //return array
 }
 
@@ -463,6 +470,24 @@ function userpoints_admin_settings() {
     '#description'   => t('Sets if the transaction timestamp should obey current time, or can be modified by the API operations. Unchecking this option will allow customization of timetamp for the transactions.'),
   );
 
+  // Number of decimals to display
+
+  $group = "precision";
+  $form[$group] = array(
+    '#type' => 'fieldset',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#title' => t('Precision'),
+  );
+
+  $form[$group][USERPOINTS_PRECISION_NUM] = array(
+    '#type' => 'textfield',
+    '#title' => t('Number of decimals to use when displaying and calculating !points', userpoints_translation()),
+    '#default_value' => variable_get(USERPOINTS_PRECISION_NUM, 2),
+    '#size' => 2,
+    '#maxlength' => 2,
+  );
+
   $form['setting'] = module_invoke_all('userpoints', 'setting');
   return system_settings_form($form);
 }
@@ -481,9 +506,9 @@ function userpoints_get_current_points($uid = NULL, $tid = NULL) {
     $tid = userpoints_get_default_tid();
   }
   elseif ($tid == 'all') {
-    return (int)db_result(db_query('SELECT SUM(points) FROM {userpoints} WHERE uid = %d', $uid));
+    return (float)db_result(db_query('SELECT SUM(points) FROM {userpoints} WHERE uid = %d', $uid));
   }
-  return (int)db_result(db_query('SELECT points FROM {userpoints} WHERE uid = %d AND tid = %d', $uid, $tid));
+  return (float)db_result(db_query('SELECT points FROM {userpoints} WHERE uid = %d AND tid = %d', $uid, $tid));
 }
 
 /**
@@ -524,10 +549,10 @@ function userpoints_get_max_points($uid = NULL, $tid = NULL) {
 }
 
 /**
- * @param $params(array) or (int)
- *    if (int) assumed to be points for current user
+ * @param $params(array) or (float)
+ *    if (float) assumed to be points for current user
  *    Accepts an array of keyed variables and parameters
- *    'points' => # of points (int) (required)
+ *    'points' => # of points (float) (required)
  *    'moderate' => TRUE/FALSE
  *    'uid' => $user->uid
  *    'time_stamp' => unix time of the points assignement date
@@ -776,19 +801,19 @@ function _userpoints_update_cache(&$params) {
   }
 
   // Calculate the current points based upon the tid
-  $current_points = (int)$params['points'] + userpoints_get_current_points($params['uid'], $params['tid']);
+  $current_points = (float)$params['points'] + userpoints_get_current_points($params['uid'], $params['tid']);
   //Grab the user's maximum points to preserve it
   $max_points = db_result(db_query('SELECT max_points FROM {userpoints} WHERE uid = %d AND tid = %d',
     $params['uid'], $params['tid']));
   if ($params['points'] > 0) {
     //points are greater than zero, update their max_points
-    $max_points = (int)$params['points'] + (int)$max_points;
+    $max_points = (float)$params['points'] + (float)$max_points;
   }
 
   // insert or update the userpoints caching table with the user's current points
   if (_userpoints_user_exists($params['uid'], $params['tid'])) {
     db_query("UPDATE {userpoints}
-              SET points = %d, max_points = %d, last_update = %d
+              SET points = %f, max_points = %f, last_update = %d
               WHERE uid = %d AND tid = %d",
               $current_points,
               $max_points,
@@ -800,7 +825,7 @@ function _userpoints_update_cache(&$params) {
   else {
     $result = db_query("INSERT INTO {userpoints}
       (uid, points, max_points, last_update, tid)
-      VALUES (%d, %d, %d, %d, %d )",
+      VALUES (%d, %f, %f, %d, %d )",
       $params['uid'],
       $current_points,
       $max_points,
@@ -1510,6 +1535,7 @@ function userpoints_block($op = 'list', $delta = 0, $edit = array()) {
         $title = t('@user\'s !points', array_merge(array('@user' => $user->name), userpoints_translation()));
         if ($user->uid) {
           $points = userpoints_get_current_points($user->uid, variable_get(USERPOINTS_CATEGORY_PROFILE_DISPLAY_TID, 0));
+          $points = theme('userpoints_points', $points);
           $show_points = format_plural($points, '!point', '!points', userpoints_translation());
           $content = t('You have %p %c', array('%p' => $points, '%c' => $show_points));
         }
@@ -1700,7 +1726,7 @@ function userpoints_list_my_userpoints() {
   $args['approved_total'] = $grand_total;
 
   //Grab the unmoderated point total
-  $args['unapproved_total'] = (int)db_result(db_query("SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d AND status = 1", $uid));
+  $args['unapproved_total'] = (float)db_result(db_query("SELECT SUM(points) FROM {userpoints_txn} WHERE uid = %d AND status = 1", $uid));
   $args['overall_total'] = ($args['approved_total'] + $args['unapproved_total']);
 
   $header = array(
@@ -1765,7 +1791,7 @@ function userpoints_list_my_userpoints() {
       }
     }
     $rows[] = array(
-      array('data' => $row->points, 'align' => 'center'),
+      array('data' => theme('userpoints_points', $row->points), 'align' => 'center'),
       array('data' => $status, 'align' => 'center'),
       array('data' => format_date($row->time_stamp, 'small'), 'align' => 'center'),
       array('data' => $operation),
@@ -1874,3 +1900,12 @@ function userpoints_views_api() {
     'api' => 2.0,
   );
 }
+
+/**
+ *  Function to make points appear in decimal format
+ */
+
+function theme_userpoints_points($points) {
+ $decimal_points = number_format($points, variable_get(USERPOINTS_PRECISION_NUM));
+ return $decimal_points;
+}
