1

我一直在尝试使用一个公式来计算我们团队正在创建的程序中的独家增值税。该公式在计算器或 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;
        }                
    }
}

问题公式是vAmt = (vRate / ((vTranAmt / 100) + 1));

另一个公式运行良好。

一个示例输入是 100,增值税率为 14.00,预期的答案是税额 14,尽管它给出的是 7!

我们正在使用 EXTJS、js 和 C# 的混搭...

任何帮助将不胜感激。

亲切的问候

缺口

4

6 回答 6

7

您可能会使用以下代码成为整数除法的牺牲品:

vAmt = (vRate / ((vTranAmt / 100) + 1));

您应该将公式更改为以下内容以避免混淆:

vAmt = (vRate / ((vTranAmt / 100.0) + 1.0));

但是,使用您提供的数字,为 vTranAmt 插入 100,为 vRate 插入 14 不会有整数除法问题,但会给您 7:

vAmt = (14 / ((100 / 100) + 1))
     = (14 / ((1        ) + 1))
     = (14 / (2              ))
     = (7                     )

所以要么你的公式不正确,要么 7 是正确的答案。

于 2009-02-02T15:01:58.683 回答
3

我想到了两件事。首先,不要使用“var”,而是使用小数或特定的东西。这样做的原因是编译器将根据变量的数据类型来决定您是指整数除法还是十进制除法。如果它选择整数,它可能会代表您进行一些意外的舍入。第二件事是确保从那些 .getCmp() 调用中正确获取变量值。

于 2009-02-02T15:01:36.627 回答
3

公式不正确,应该是

vAmt = vTranAmt * (vRate / 100.0d);
于 2009-02-02T15:07:40.403 回答
1

只是为了解释:

公式:

vAmt = (vRate / ((vTranAmt / 100) + 1));

参数:

vRate = 14
vTranAmt = 100

代替:

vAmt = (14 / ((100 / 100) + 1));

结石:

vAmt = (14 / (1 + 1));

结石:

vAmt = (14 / (2));

结石:

vAmt = (14 / 2);

结石:

vAmt = (7);

所以 7 是预期的答案。

但是你可以重写

vAmt = 100 * vRate / (vTranAmt + 100); 
于 2009-02-02T15:04:26.963 回答
0

我猜这是由于整数和浮点数之间的差异。

试试这样:

vAmt = (vRate / ((vTranAmt / 100.0) + 1.0));
于 2009-02-02T15:01:05.643 回答
0

你确定公式在 Excel 中是相同的并且在那里有效吗?我不确定你到底想做什么,但你除以vTranAmt,所以这个值越大,结果越小。这听起来不对,如果结果应该是一些税额......

编辑:很可能你已经切换了vRate和变量。vTranAmt

于 2009-02-02T15:06:48.783 回答