Administrator
2026-06-05 782bebb2e734e1782e875fc2f45cbef71cb07712
fix(okxNewPrice): 解决网格交易价格精度计算问题

- 在longEntryPrice计算中添加精度补偿epsilon值防止向下截断错误
- 在shortEntryPrice计算中添加精度补偿epsilon值防止向下截断错误
- 修复因BigDecimal精度丢失导致的网格数量计算错误
- 防止1.99998等浮点数被向下取整为1的问题
1 files modified
8 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxGridTradeService.java 8 ●●●● patch | view | raw | blame | history
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);