我允许用户以 NET 或 Gross 的形式将产品价格输入库存。如果他们以总价格输入价格,则在存储之前为他们计算 NET,并使用以下代码:
var vatrate = 12;
IsuppGross = parseInt(suppGross * 100); // makes it an integer
// calc net
var revVR = parseFloat('1.'+vatrate);
Net = ( ( IsuppGross / revVR) / 100 ).toFixed(2);
我努力让它发挥作用,但不确定这是否是问题所在。
如果我输入“100.00”作为总数字并且我的增值税率为 12%,它返回Net
为“112.00”,所以它似乎正在工作。
所以我输入了一个总价为 100.00 美元的产品,净价计算为“89.29 美元”(我假设这是正确的)。
为上述 10 个项目创建发票时,发票底部如下所示:
Net Subtotal $892.90
VAT $107.15
Grand Total $1000.05
我期待的是:
Net Subtotal $892.90
VAT $107.10
Grand Total $1000.00
...特别是因为,当仅出售上述其中一种时,会导致:
Net Subtotal $89.29
VAT $10.71
Grand Total $100.00
......这是预期的。因此,可以合理地假设购买 10 件相同物品的成本恰好是其十倍。
这是我用来将增值税添加到净小计的公式:
数量 x 净价 x 0.12 (10 x 89.29 x 0.12) = 107.148
然后将上述四舍五入为 107.15,将其添加到净小计为 1000.05。
当我重新添加增值税时,我需要什么公式才能达到 1000?
总结/澄清 这个公式...数量 x 净价 x 0.12 (10 x 89.29 x 0.12)
给我107.148
,但我认为我需要它给我的是107.10
。
那么我可以使用什么javascript函数来实现这一点(或者我需要如何调整我的公式/将其转换为代码)?
更新 @jakub 我认为是在正确的轨道上。我找到了一种简单的方法来测试它,方法是:
alert( (892.90 * 0.12).toFixed(2) ); // should equal 107.10
(仍然等于 107.15)
以上内容基于 Jakub 的输入,如下所示。请注意,我在这里没有单独乘以 10,因为我注意到我们正在小计级别工作。