在 Javascript 中,一个数字的总和和四舍五入的相同数字的百分比可以反转吗?
Can the sum of a number, and a percentage of the same number rounded up be reversed in Javascript?
我正在尝试 运行 反向计算。取数函数为:
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
简而言之,它 returns 一个数字的总和和该数字的百分比四舍五入到最接近的百位。
是否可以得到基价(输入,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 问题,但我不确定如何为数学观众设置格式。即使在其他一些程序员的帮助下,我也无法解决这个问题。
像这样,但是因为四舍五入会有差异
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
编辑:
通过使用现有的 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, 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')
}
我正在尝试 运行 反向计算。取数函数为:
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
简而言之,它 returns 一个数字的总和和该数字的百分比四舍五入到最接近的百位。
是否可以得到基价(输入,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 问题,但我不确定如何为数学观众设置格式。即使在其他一些程序员的帮助下,我也无法解决这个问题。
像这样,但是因为四舍五入会有差异
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
编辑: 通过使用现有的 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, 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')
}