Fix BTC option prices losing trailing zeros in display.

Integer tick formatting was stripping zeros (1370 -> 137), so hedge-plan quotes looked wrong versus the options list.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-15 17:12:33 +08:00
parent 142b6de0f6
commit da3975e42e
5 changed files with 22 additions and 7 deletions
+3 -1
View File
@@ -45,7 +45,9 @@
let decimals = 0;
if (tick < 1) decimals = Math.max(0, -Math.round(Math.log10(tick)));
else if (String(tick).indexOf(".") >= 0) decimals = String(tick).split(".")[1].length;
let s = n.toFixed(decimals).replace(/\.?0+$/, "");
let s = n.toFixed(decimals);
// 仅裁小数尾零;整数 tick(BTC=5)时绝不能把 1370 裁成 137
if (decimals > 0) s = s.replace(/\.?0+$/, "");
return s || "0";
}
+3 -1
View File
@@ -48,7 +48,9 @@
let decimals = 0;
if (tick < 1) decimals = Math.max(0, -Math.round(Math.log10(tick)));
else if (String(tick).indexOf(".") >= 0) decimals = String(tick).split(".")[1].length;
let s = n.toFixed(decimals).replace(/\.?0+$/, "");
let s = n.toFixed(decimals);
// 仅裁小数尾零;整数 tick(BTC=5)时绝不能把 1370 裁成 137
if (decimals > 0) s = s.replace(/\.?0+$/, "");
return s || "0";
}
+4 -1
View File
@@ -20,7 +20,10 @@
let decimals = 0;
if (tick < 1) decimals = Math.max(0, -Math.round(Math.log10(tick)));
else if (String(tick).indexOf(".") >= 0) decimals = String(tick).split(".")[1].length;
return n.toFixed(decimals).replace(/\.?0+$/, "") || "0";
let s = n.toFixed(decimals);
// 仅裁小数尾零;整数 tick(BTC=5)时绝不能把 1370 裁成 137
if (decimals > 0) s = s.replace(/\.?0+$/, "");
return s || "0";
}
function fmtUsdc(v) {
+8 -4
View File
@@ -116,10 +116,14 @@ def format_option_px(px: float, tick_sz: Any) -> str:
tick = _safe_float(tick_sz)
if tick is None or tick <= 0:
return str(px)
decimals = max(0, -int(round(math.log10(tick)))) if tick < 1 else 0
if tick >= 1:
decimals = len(str(tick).split(".")[-1]) if "." in str(tick) else 0
return f"{px:.{decimals}f}".rstrip("0").rstrip(".") or "0"
if tick < 1:
decimals = max(0, -int(round(math.log10(tick))))
return f"{px:.{decimals}f}".rstrip("0").rstrip(".") or "0"
# tick>=1(如 BTC 期权 tickSz=5):只按整数展示,禁止 rstrip('0') 把 1370 变成 137
if "." in str(tick):
decimals = len(str(tick).split(".")[-1])
return f"{px:.{decimals}f}".rstrip("0").rstrip(".") or "0"
return str(int(round(float(px))))
def format_usdc_amount(v: float | None) -> str | None:
+4
View File
@@ -17,6 +17,10 @@ def test_round_option_px():
assert round_option_px(14.9184, "0.2", "sell") == 14.8
assert round_option_px(14.81, "0.2", "buy") == 15.0
assert format_option_px(14.8, "0.2") == "14.8"
# BTC 期权 tickSz=5: 整数末尾 0 必须保留 (1370 不能显成 137)
assert format_option_px(1370, "5") == "1370"
assert format_option_px(1160, 5) == "1160"
assert format_option_px(1000, "5") == "1000"
def test_premium_per_sheet():