From 774e9d24a14fd258bd832b10dab445ebaa792d29 Mon Sep 17 00:00:00 2001
From: Marek Kotewicz <marek.kotewicz@gmail.com>
Date: Fri, 16 Jan 2015 16:26:58 +0100
Subject: abi.js rounds down floating point input

---
 lib/abi.js | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

(limited to 'lib')

diff --git a/lib/abi.js b/lib/abi.js
index fbd6effb6..11141e28b 100644
--- a/lib/abi.js
+++ b/lib/abi.js
@@ -28,6 +28,8 @@ if (process.env.NODE_ENV !== 'build') {
 
 var web3 = require('./web3'); // jshint ignore:line
 
+BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_DOWN });
+
 // TODO: make these be actually accurate instead of falling back onto JS's doubles.
 var hexToDec = function (hex) {
     return parseInt(hex, 16).toString();
@@ -87,25 +89,23 @@ var setupInputTypes = function () {
     
     /// Formats input value to byte representation of int
     /// If value is negative, return it's two's complement
+    /// If the value is floating point, it rounds it down
     /// @returns right-aligned byte representation of int
     var formatInt = function (value) {
         var padding = 32 * 2;
-        if (value instanceof BigNumber) {
+        if (value instanceof BigNumber || typeof value === 'number') {
+            if (typeof value === 'number')
+                value = new BigNumber(value);
+            value = value.round();
+
             if (value.lessThan(0)) 
-                value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1).toString(16);
-            else 
-                value = value.toString(16);
-        }
-        else if (typeof value === 'number') {
-            if (value < 0)
-                value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1).toString(16);
-            else
-                value = new BigNumber(value).toString(16);
+                value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1);
+            value = value.toString(16);
         }
         else if (value.indexOf('0x') === 0)
             value = value.substr(2);
         else if (typeof value === 'string')
-            value = new BigNumber(value).toString(16); 
+            value = formatInt(new BigNumber(value));
         else
             value = (+value).toString(16);
         return padLeft(value, padding);
-- 
cgit v1.2.3