ユーザーが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」と入力し、VAT率が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
...特に、上記の1つだけを販売すると、次のようになります。
Net Subtotal $89.29
VAT $10.71
Grand Total $100.00
...期待していた。したがって、同じアイテムを10個購入すると、正確に10倍の費用がかかると想定するのが妥当です。
純小計にVATを追加するために使用している式は次のとおりです。
数量x正味価格x0.12(10 x 89.29 x 0.12)= 107.148
次に、上記は107.15に丸められ、正味の小計に加算すると1000.05になります。
VATを再度追加するときに、1000に到達するために必要な数式は何ですか?
この式を要約/明確化するに は...数量x正味価格x0.12(10 x 89.29 x 0.12)
私に与えます107.148
が、私が私に与えるためにそれが必要だと思うのは107.10
代わりです。
では、それを実現するためにどのjavascript関数を使用できますか(または、数式を調整したり、コードに変換したりするにはどうすればよいですか)。
UPDATE @jakubは正しい方向に進んでいると思います。次のようなことを行うことで、簡単にテストする方法を見つけました。
alert( (892.90 * 0.12).toFixed(2) ); // should equal 107.10
(まだ107.15に等しい)
上記は、以下のJakubからの入力に基づいています。小計レベルで作業していることに気付いたので、ここでは10を個別に乗算していないことに注意してください。