-1

ユーザーが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を個別に乗算していないことに注意してください。

4

3 に答える 3

2

そのための1つの方法は、別の場所に丸めを配置することです。

round(quantity * price) != quantity * round(price)

同じことがVATにも当てはまります。結果の丸めは、1つの製品のVATを丸めてから数量を掛けるのとは少し異なります。また、数量は浮動小数点数ではなく整数でなければならないので(そうでない場合は別のケースです)、丸め後に乗算しても小数点以下の桁数が増えることはありません。

これが少しお役に立てば幸いです。

OK、編集に返信するには:

あなたが持っている

(quantity * price * VAT).toFixed(2) = (10 * 89.29 * 0.12).toFixed(2) = (107.148).toFixed(2) = 107.15

あなたが持っている必要があります

quantity * (price * VAT).toFixed(2) = 10 * (89.29 * 0.12).toFixed(2) = 10 * (10.7148).toFixed(2) = 10 * 10.71 = 107.10
于 2013-03-25T13:17:19.733 に答える
1

法的な見解では、請求されるVATの金額は、請求される商品とサービスの正しい割合である必要があるため、VATを含むラインアイテムの価格を合計するべきではないと言っているのは正しいと思います。

私が取り組んだ1つのシステムでは、1行あたりのVATが、丸め誤差を排除するために最後の行のVAT額を変更しました。価格を小数点以下5桁で表示しない限り、常に表示されます(VAT率が有効数字3桁であると想定)。

于 2013-03-25T13:32:14.563 に答える
0

基本的に、この問題の理由は、コンピューターが基数2を使用しているため、コンピューターが浮動小数点数を使用してほとんどの基数10の実数を表すことができないためです。

このスレッドを確認してください: 通貨を表すためにDoubleまたはFloatを使用しないのはなぜですか?

したがって、最初のステップの1つは、通貨に常に整数を使用することです。この場合、ドルではなくセントで測定されます。

于 2013-03-25T13:41:35.140 に答える