refactor(withdraw): 优化快速提现金额计算逻辑
- 引入舍入单位计算,避免小额差值导致的选项过多问题 - 实现最小最大钻石数量的舍入处理 - 重构快速提现金额生成算法,提高计算精度 - 使用索引映射方式重新实现金额选项生成 - 更新项目索引统计信息,反映代码结构变化
This commit is contained in:
@@ -58,27 +58,39 @@ function getWithdrawDiamondBounds(
|
||||
|
||||
function getQuickWithdrawAmounts(bounds: WithdrawDiamondBounds) {
|
||||
const { maximumDiamonds, minimumDiamonds } = bounds
|
||||
const availableOptionCount = maximumDiamonds - minimumDiamonds + 1
|
||||
const roundingUnit =
|
||||
10 ** Math.max(0, Math.floor(Math.log10(maximumDiamonds)) - 1)
|
||||
const roundedMinimumDiamonds =
|
||||
Math.ceil(minimumDiamonds / roundingUnit) * roundingUnit
|
||||
const roundedMaximumDiamonds =
|
||||
Math.floor(maximumDiamonds / roundingUnit) * roundingUnit
|
||||
|
||||
if (roundedMinimumDiamonds > roundedMaximumDiamonds) {
|
||||
return []
|
||||
}
|
||||
|
||||
const availableOptionCount =
|
||||
(roundedMaximumDiamonds - roundedMinimumDiamonds) / roundingUnit + 1
|
||||
|
||||
if (availableOptionCount <= QUICK_WITHDRAW_OPTION_COUNT) {
|
||||
return Array.from(
|
||||
{ length: availableOptionCount },
|
||||
(_, index) => minimumDiamonds + index,
|
||||
(_, index) => roundedMinimumDiamonds + index * roundingUnit,
|
||||
)
|
||||
}
|
||||
|
||||
const amounts = new Set<number>([minimumDiamonds, maximumDiamonds])
|
||||
const span = maximumDiamonds - minimumDiamonds
|
||||
const lastOptionIndex = availableOptionCount - 1
|
||||
const optionIndexes = new Set<number>([0, lastOptionIndex])
|
||||
|
||||
for (let index = 1; index < QUICK_WITHDRAW_OPTION_COUNT - 1; index += 1) {
|
||||
amounts.add(
|
||||
Math.round(
|
||||
minimumDiamonds + (span * index) / (QUICK_WITHDRAW_OPTION_COUNT - 1),
|
||||
),
|
||||
optionIndexes.add(
|
||||
Math.round((lastOptionIndex * index) / (QUICK_WITHDRAW_OPTION_COUNT - 1)),
|
||||
)
|
||||
}
|
||||
|
||||
return [...amounts].sort((left, right) => left - right)
|
||||
return [...optionIndexes]
|
||||
.sort((left, right) => left - right)
|
||||
.map((index) => roundedMinimumDiamonds + index * roundingUnit)
|
||||
}
|
||||
|
||||
function getCurrencyExchangeRate(
|
||||
|
||||
Reference in New Issue
Block a user