From 782bebb2e734e1782e875fc2f45cbef71cb07712 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 05 Jun 2026 11:56:13 +0800
Subject: [PATCH] fix(okxNewPrice): 解决网格交易价格精度计算问题

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxGridTradeService.java |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxGridTradeService.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxGridTradeService.java
index d0bc3b9..b8a94ce 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxGridTradeService.java
@@ -563,7 +563,9 @@
 
         BigDecimal triggerPrice = newEntryGrid.getGridPrice();
         BigDecimal priceDiff = longEntryPrice.subtract(triggerPrice).abs();
-        int count = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
+        // 精度补偿:步长被setScale截断,priceDiff/step可能产生1.99998→Down截断为1的问题
+        BigDecimal epsilon = new BigDecimal("0.00000001");
+        int count = priceDiff.add(epsilon).divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
         count = Math.max(1, count);
         int entryQty = count * Integer.parseInt(config.getQuantity());
         String size = String.valueOf(entryQty);
@@ -605,7 +607,9 @@
 
         BigDecimal triggerPrice = newEntryGrid.getGridPrice();
         BigDecimal priceDiff = shortEntryPrice.subtract(triggerPrice).abs();
-        int count = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
+        // 精度补偿:步长被setScale截断,priceDiff/step可能产生1.99998→Down截断为1的问题
+        BigDecimal epsilon = new BigDecimal("0.00000001");
+        int count = priceDiff.add(epsilon).divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
         count = Math.max(1, count);
         int entryQty = count * Integer.parseInt(config.getQuantity());
         String size = String.valueOf(entryQty);

--
Gitblit v1.9.1