JavaScript中能否反向推导原值:数字加其向上取整到百位的百分比之和
反向推导基准价格的实现方案
推导逻辑
首先拆解正向计算的公式:
设最终价格为P,原始基准价格为N,百分比为r,C为N向上取整到最近百位的整百值,满足:
C - 99 ≤ N ≤ C(C为100的正整数倍)
正向计算的公式为:P = N + C * r
将公式变形得到N = P - C * r,代入上述不等式解出C的取值范围:
- 代入左边界:
C - 99 ≤ P - C * r→C * (1 + r) ≤ P + 99→C ≤ (P + 99) / (1 + r) - 代入右边界:
P - C * r ≤ C→P ≤ C * (1 + r)→C ≥ P / (1 + r)
由于取值区间长度为99/(1 + r),r为正数时区间长度必然小于100,因此区间内有且仅有一个100的整数倍,就是我们要找的C。
代码实现
const getBasePrice = (price, percentage) => { const rate = 1 + percentage const lowerBound = price / rate // 找到区间内唯一的整百值C const C = Math.ceil(lowerBound / 100) * 100 // toFixed处理浮点数精度问题,转数值返回 return +(price - C * percentage).toFixed(2) }
测试验证
getBasePrice(1030, 0.03) // 1000 getBasePrice(33214, 0.03) // 32245 getBasePrice(53709.23, 0.03) // 52143.23
完全匹配给定测试用例。
内容的提问来源于stack exchange,提问作者Tom Parke
相关产品推荐
相关产品推荐

