问题描述
const getPrice = (num,percentage) => num + ((Math.ceil(num/100)*100)*percentage)
getPrice(1000,0.03) // returns 1,030
getPrice(32245,0.03) // returns 33,214
getPrice(52143.23,0.03) // 53709.23
简单来说,它返回一个数字的总和以及该数字的百分比,四舍五入到最接近的百位。
有没有可能得到基价(输入,num)给出函数的结果?
const getBasePrice = (num,percentage) => {return insertLogicHere}
getBasePrice(1030,0.03) // returns 1000
getBasePrice(33214,0.03) // returns 32245
getBasePrice(53709.23,0.03) // returns 52143.23
我知道这更像是一个数学问题,而不是一个纯粹的 Javascript 问题,但我不确定如何为数学读者设置格式。即使在工作中的其他一些程序员的帮助下,我也无法弄清楚这一点。
解决方法
编辑: 通过使用现有的 getPrice 方法,您可以计算出原始值和新值之间的差异并将其精确反转:
const getPrice = (num,percentage) => num + ((Math.ceil(num/100)*100)*percentage)
const getBasePrice = (num,percentage) => {return Math.floor(num/(1+percentage))}
let num = 53709.23
let percentage = 0.03
let initialReverse = getBasePrice(num,percentage)
let finalReverse = initialReverse - (getPrice(initialReverse,percentage) - num)
console.log(finalReverse) //returns 52143.23
像这样,但是由于四舍五入,您会有所不同。
const getBasePrice = (num,percentage) => {return (Math.round((100*num)/(((percentage*100)+100))))}
console.log(getBasePrice(1030,0.03)) // returns 1000
console.log(getBasePrice(33214,0.03)) // returns 32245
编辑
如果删除舍入是和完全匹配。也许您可以在进行操作时这样做,然后在想要显示此值时应用格式。
const getPrice = (num,percentage) => num + (num/100)*100*percentage
console.log(getPrice(1000,0.03)) // returns 1,030
console.log(getPrice(32245,0.03)) // returns 33212.35
console.log(getPrice(1244.124,0.03)) // returns 1281.4477200000001
const getBasePrice = (num,percentage) => ((100*num)/(((percentage*100)+100)))
console.log(getBasePrice(1030,0.03)) // returns 1000
console.log(getBasePrice(33212.35,0.03)) // returns 32245
console.log(getBasePrice(1281.4477200000001,0.03)) // returns 1244.124
好的,所以我打电话给我妈妈,她帮我弄清楚了。这里有一些更具体的变量名称,小数点正在修复中,因为我们使用的是美元。
const getBasePrice = (num,percent) => {
const guess = num / (1 + percent);
const roundUp = Math.ceil(guess / 100) * 100;
const stampDuty = roundUp * percent;
return parseFloat((num - stampDuty).toFixed(2));
};
通过测试:
const getPrice = (num,percentage) => {
return num + Math.ceil(num / 100) * 100 * percentage;
}
const getBasePrice = (num,percent) => {
const guess = num / (1 + percent);
const roundUp = Math.ceil(guess / 100) * 100;
const stampDuty = roundUp * percent;
return parseFloat((num - stampDuty).toFixed(2));
};
const testFunction = () => {
const percent = 0.03
const number = parseFloat((Math.random() * 100000).toFixed(2))
const stampDutyPrice = getPrice(number,percent)
const backNumber = getBasePrice(stampDutyPrice,percent)
return number === backNumber
}
for (let i = 0; i < 100; i++) {
console.log(testFunction() ? 'test passed' : 'text failed')
}