我一直在尝试使用一个公式来计算我们团队正在创建的程序中的独家增值税.当在计算器或excel中使用时,该公式可正常工作,但在我们的程序中的函数中使用时会提供不同的输出!
这是功能:
function fn_calcVat()
{
var vRate = Ext.getCmp('crd_vat_rate').getValue();
var vTranAmt = Ext.getCmp('crd_tran_amt').getValue();
if (vRate != '' && vTranAmt != '')
{
alert(Ext.getCmp('vatable').getValue().toString());
var vAmt = 0;
if (Ext.getCmp('vatable').getValue().toString() == 'Y')
{
vAmt = (vRate / ((vTranAmt / 100) + 1));
Ext.getCmp('crd_vat_amt').setValue(vAmt.toFixed(2));
Ext.getCmp('crd_tran_tot').setValue(vTranAmt.toString());
vAmt = 0;
}
else
{
vAmt = ((vRate / 100) * vTranAmt);
Ext.getCmp('crd_vat_amt').setValue(vAmt.toFixed(2));
Ext.getCmp('crd_tran_tot').setValue((vTranAmt + vAmt));
vAmt = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题的公式是 vAmt = (vRate / ((vTranAmt / 100) + 1));
另一个公式是完美的.
一个示例输入将是100,增值税率为14.00,预期答案将是14的税额,但它给它7!
我们正在使用EXTJS,js和C#的混搭......
任何帮助将不胜感激.
亲切的问候
缺口
您可能会使用以下代码成为整数除法的牺牲品:
vAmt = (vRate / ((vTranAmt / 100) + 1));
Run Code Online (Sandbox Code Playgroud)
您应该将公式更改为以下内容以避免混淆:
vAmt = (vRate / ((vTranAmt / 100.0) + 1.0));
Run Code Online (Sandbox Code Playgroud)
但是,使用您提供的数字,为vTranAmt插入100和为vRate插入14将不会有整数除法的问题,但会给你7:
vAmt = (14 / ((100 / 100) + 1))
= (14 / ((1 ) + 1))
= (14 / (2 ))
= (7 )
Run Code Online (Sandbox Code Playgroud)
所以要么你的公式不正确,要么7是正确的答案.
| 归档时间: |
|
| 查看次数: |
1321 次 |
| 最近记录: |