我有一个固定的税收值,比如50,00美元,我想在人们之间分配这个税。因此,一个人可以选择他将支付多少税款。一旦这个人选择了配额,其余的税收就会分配给其他人。
我已经制作了一个javascript(我正在使用EmberJs)功能来自动执行此操作,但有时会将该值评估为超过50美元,有时甚至更低。
我的功能:
percentageFromValue(person, selectedValue){
selectedValue = selectedValue.replace(/[R$\s]/g,'');
selectedValue = selectedValue.replace(/[,]/g,'.');
selectedValue = parseFloat(selectedValue);
let taxValue= this.get('taxValue');
///nao deixar valor utrapasse o valor da taxa
if(selectedValue> taxValue)
valor = taxValue;
let personPercentage = (selectedValue*100.0 / taxValue);
personPercentage = parseFloat(personPercentage );
let parcialSum= 0;
person.set('pctTax',personPercentage.toFixed(2));
let remainingPercent= 100.0 - personPercentage ;
let totalPersons = this.get('persons.length');
let pctPerPerson= remainingPercent/ (totalPersons - 1);
let valuePerPerson= (pctPerPerson* taxValue) / 100.0;
this.get('persons').forEach(r =>{
if(person.get('id') != r.get('id')){
r.set('pctTax',pctPerPerson);
r.set('value',valuePerPerson.toFixed(2));
}
});
},
如何使此自动重新分配始终总计达到50,00美元?
答案 0 :(得分:1)
这更像是一个舍入问题,而不是编程问题。
假设您要在三个人之间划分50美元的税... ... 50/3 = 16.6666666 ...假设它是一种货币并且您向上舍入到两位小数,每个人支付16.66美元,总和是16.66 * 3 = 49.98。
如果没有要求所有人每次都支付完全相同的税额,我只是加/减第一人的差异:
let remainingPercent= 100.0 - personPercentage ;
let totalPersons = this.get('persons.length');
let pctPerPerson= remainingPercent/ (totalPersons - 1);
let valuePerPerson= (pctPerPerson* taxValue) / 100.0;
let roundingError = taxValue - pctPerPerson * totalPersons;
this.get('persons').forEach(r =>{
if(person.get('id') != r.get('id')){
r.set('pctTax',pctPerPerson);
if (this.indexOf(r) == 0) {
r.set('value',valuePerPerson.toFixed(2) + roundingError);
} else {
r.set('value',valuePerPerson.toFixed(2));
}
}
});