add omit_zero to binance
diff --git a/js/base/functions/number.js b/js/base/functions/number.js
index cfd6e7db373d..6bc54ecc0526 100644
--- a/js/base/functions/number.js
+++ b/js/base/functions/number.js
@@ -314,6 +314,16 @@ function toWei (amount, decimals = 18) {
     return numberToString (Math.floor (parseFloat (n + 'e' + newExponent))) // wei must be whole numbers
 }
 
+function omitZero (stringNumber) {
+    if (stringNumber === undefined) {
+        return undefined
+    }
+    if (parseFloat (stringNumber) === 0) {
+        return undefined
+    }
+    return stringNumber
+}
+
 /*  ------------------------------------------------------------------------ */
 
 module.exports = {
@@ -324,6 +334,7 @@ module.exports = {
     decimalToPrecision,
     truncate_to_string,
     truncate,
+    omitZero,
     precisionConstants,
     ROUND,
     TRUNCATE,
diff --git a/js/binance.js b/js/binance.js
index 89d6b1f20818..fd86981ea8c2 100644
--- a/js/binance.js
+++ b/js/binance.js
@@ -1845,9 +1845,9 @@ module.exports = class binance extends Exchange {
         const status = this.parseOrderStatus (this.safeString (order, 'status'));
         const marketId = this.safeString (order, 'symbol');
         const symbol = this.safeSymbol (marketId, market);
-        const filled = this.safeNumber (order, 'executedQty');
-        // using safeFloat here until we add comparisons to Precise
-        const floatFilled = this.safeFloat (order, 'executedQty');
+        const filledString = this.safeString (order, 'executedQty', '0');
+        const filled = this.parseNumber (filledString);
+        const filledFloat = parseFloat (filledString);
         let timestamp = undefined;
         let lastTradeTimestamp = undefined;
         if ('time' in order) {
@@ -1856,20 +1856,17 @@ module.exports = class binance extends Exchange {
             timestamp = this.safeInteger (order, 'transactTime');
         } else if ('updateTime' in order) {
             if (status === 'open') {
-                if (floatFilled > 0) {
+                if (filledFloat > 0) {
                     lastTradeTimestamp = this.safeInteger (order, 'updateTime');
                 } else {
                     timestamp = this.safeInteger (order, 'updateTime');
                 }
             }
         }
-        const average = this.safeNumber (order, 'avgPrice');
-        let price = this.safeNumber (order, 'price');
-        // using safeFloat here until we add comparisons to Precise
-        const floatPrice = this.safeFloat (order, 'price');
-        if (floatPrice <= 0) {
-            price = undefined;
-        }
+        const averageString = this.safeString (order, 'avgPrice');
+        const average = this.parseNumber (this.omitZero (averageString));
+        const priceString = this.safeString (order, 'price');
+        const price = this.parseNumber (this.omitZero (priceString));
         const amount = this.safeNumber (order, 'origQty');
         // - Spot/Margin market: cummulativeQuoteQty
         // - Futures market: cumQuote.
@@ -1886,7 +1883,8 @@ module.exports = class binance extends Exchange {
         const clientOrderId = this.safeString (order, 'clientOrderId');
         const timeInForce = this.safeString (order, 'timeInForce');
         const postOnly = (type === 'limit_maker') || (timeInForce === 'GTX');
-        const stopPrice = this.safeNumber (order, 'stopPrice');
+        const stopPriceString = this.safeString (order, 'stopPrice');
+        const stopPrice = this.parseNumber (this.omitZero (stopPriceString));
         return this.safeOrder ({
             'info': order,
             'id': id,
diff --git a/php/Exchange.php b/php/Exchange.php
index 3a356af7b007..514296991cc6 100644
--- a/php/Exchange.php
+++ b/php/Exchange.php
@@ -224,6 +224,7 @@ class Exchange {
         'numberToString' => 'number_to_string',
         'precisionFromString' => 'precision_from_string',
         'decimalToPrecision' => 'decimal_to_precision',
+        'omitZero' => 'omit_zero',
         'isJsonEncodedObject' => 'is_json_encoded_object',
         'stringToBinary' => 'string_to_binary',
         'stringToBase64' => 'string_to_base64',
@@ -3071,4 +3072,14 @@ public function parse_precision($precision) {
         }
         return '1e' . Precise::string_neg($precision);
     }
+
+    public function omit_zero($string_number) {
+        if ($string_number === null) {
+            return null;
+        }
+        if (floatval($string_number) === null) {
+            return null;
+        }
+        return $string_number;
+    }
 }
diff --git a/python/ccxt/base/exchange.py b/python/ccxt/base/exchange.py
index 5949cd733570..f2a895dda60d 100644
--- a/python/ccxt/base/exchange.py
+++ b/python/ccxt/base/exchange.py
@@ -2321,3 +2321,10 @@ def parse_precision(self, precision):
         if precision is None:
             return None
         return '1e' + Precise.string_neg(precision)
+
+    def omit_zero(self, string_number):
+        if string_number is None:
+            return None
+        if float(string_number) == 0:
+            return None
+        return string_number
