1.7の丸めの問題のステータスは何ですか?


27

Magento CE 1.7を使用しており、さまざまな丸めの問題があります。さまざまな計算では、0.01ユーロの差があります。

基本的な問題は、記事の価格が含まれていることかもしれません。税金。

共同プログラマは、Mage_Core_Model_Store::roundPrice()4桁の精度で計算するメソッドを上書きしました。しかし、これはPayPalの支払いに問題を引き起こすようです。

これらの問題の解決策はありますか?

編集:

私たちは、実際には、基本的に丸め4桁を追加する公式のコアのパッチを試してみました\Mage_Tax_Model_Sales_Total_Quote_Shipping::_round\Mage_Tax_Model_Sales_Total_Quote_Subtotal::_deltaRoundそして\Mage_Tax_Model_Sales_Total_Quote_Tax::_deltaRoundクーポン丸め問題ではなく、ペイパルの問題を修正しました。


私が覚えている限りでは、Magentoは小数点以下4桁で価格を保存しています。したがって、価格が小数点以下4桁で入力されている場合、計算は正しいです。しかし、私は間違っているかもしれません。
user487772

1
「4 dec。ポイントの入力」とはどういう意味ですか?しかし、Magentoの丸めは2 decで機能します。ポイント。また、PayPalインターフェースは2月2日に機能すると思います。ポイント-これは問題が始まる場所のようです。
アレックス

正しく思い出せば、adminで小数点以下4桁で価格を入力すると、小数点以下4桁でdbに保存されます。その後、出力中に2ポイントに丸められますが、小数点以下4桁の価格は丸められるため、丸めは正しくなります。
user487772

確かに-しかし、特にパーセンテージベースのクーポンコードが関係している場合、主に合計計算に問題があります。
アレックス

ああ、それからあなたの質問が間違っていました。ごめんなさい。
user487772

回答:


10

記載されているシナリオをカバーする、Magentoのコア税モジュール内のいくつかの丸め問題を認識しています。現在、次の1.13リリースでこれらの問題に取り組んでいます。これらの丸めの問題は、カート内の品目が正しく加算されるかどうかを判断する簡単なPaypalチェックをトリガーします。Fabianのパッチが短期的にPaypalのチェックを処理するようです。

Magento Taxモジュールの改善方法についてご質問、ご意見、ご提案がありましたら、お気軽にご連絡ください。税を担当するプロダクトマネージャーです。

よろしく、チャック


すばらしいです!どの問題に取り組むかを示すために利用可能なテストスイートはありますか?
アレックス

1
チャック、確認するためにユーザー情報を設定してもよろしいですか?
ベンマークス

テストは内部のみです。既知の丸めの問題に関する詳細については、少し興味深いです。顧客は、価格、税率、割引などの特定の組み合わせを使用して、特定の税構成に関連付けられていると見なします。回避すべき危険な構成としての構成(小さなコーナーケース)。
チャック

少し話題から外れていますが、CE 1.8エディションもあるということですか?
セルゲイグク

はい-CEリリースはEEリリースより約1か月遅れます。1.13は次のEEリリースです。
チャック

7

Andreas Vogtのおかげで、Paypalのラウンドバグを修正するモジュールを作成しました。Andreasからハッキングされたコアファイルがいくつか提供され、モジュールを作成しました。合計が正しいかどうかをチェックし、正しくない場合は修正します。

コアハックであるAfaikは、実際にテストされています。多くの人々がこのモジュールを求めましたが、それが機能するかどうかについてのフィードバックはありませんでした。しかし、単体テストです!(書き換えが機能するかどうかだけです。なぜなら、PayPalの問題は何なのかわからなかったからです;-))

https://github.com/magento-hackathon/PaypalRoundBugfix


1
Hm ..どのバグが正確に修正されますか?cart-line-items-transferバグのように見えます。実際にカート転送をオフにしました。そして、それは4桁の丸めパッチで適用されるのですか?
アレックス

複数の問題がありますか?私が言ったように、私はそれが正確に何を修正するかわからない-複数の問題がある場合:(
Fabian Blechschmidt

5

ペイパルの丸めのバグと、100%割引のクーポンコードの問題の両方に直面しています。純価格の3桁目が5(3,325)である価格(ユーロ3,99を含む)にのみ問題があります。したがって、税(ここでは20%)の3桁目は5(0,665)です。したがって、両方の価格(paypalとmagentoが行うもの)を丸めて追加すると、合計は基本価格(Eur 4,00)よりもEur 0,01高くなります。

正しい計算は正味3,32ユーロ+ 0,67ユーロ税= 3,99ユーロ

一般的な解決策も見つけようとしているので、PayPalの丸め修正を試してみてください!


すばらしい、問題がある場合は教えてください、私はバグフィックスを野外で助けて見て、必要に応じてデバッグしたいと思っています!
ファビアンBlechschmidt

1
参考までに、これまでに説明した問題は、今後のリリース(1.8 CE / 1.13 EE)で修正されます。
チャック

@Chuck私はこのシナリオを1.13.0.1のMage_Tax_Model_Sales_Total_Quote_Taxでテストしましたが、1.12プロジェクトのドロップイン置換として問題を解決したようです。どうもありがとう。1.8CEのETAはまだありますか?
ジョナサンデイ

4

価格、数量、割引、税、およびそれらの精度の間には一般的な関係があります。

Assume:
x is the price
y is the percentage
s is the rounded sub-total

2 Directions
A) incl. Tax => excl. Tax => incl. Tax
B) excl. => incl. => excl.

重要な問題は、最大値で計算している小計です。エラー。2桁の小数は5 * 10 ^ -3を意味します

A)x * 10 ^ 2 /(y + 10 ^ 2)// s *(y + 10 ^ 2)/ 10 ^ 2

B)x *(y + 10 ^ 2)/ 10 ^ 2 // s * 10 ^ 2 /(10 ^ 2 + y)

A)
Subtotal precision 2 fractional digits:
5*10^-3*(y+10^2)/10^2 => (y+10^2)/10^2<1 => no y
3 fractional digits:
5*10^-4*(y+10^2)/10^2 => (y+10^2)/10^2<10 => y<900
4 fractional digits:
5*10^-5*(y+10^2)/10^2 => (y+10^2)/10^2<10^2 => y<90900
(must be a very bad country)

......

B)
Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/(10^2+y) => 10^2/(10^2+y)&lt;1 => every y

割引または税金を使用して計算し、価格を再計算する場合、次の説明が興味深い場合があります。フロントエンドのケースはわからないので、インターン計算がある可能性があることに注意してください。A)合計=>税/割引=>合計B)税/割引=>合計=>税/割引

A)x * y / 10 ^ 2 // s * 10 ^ 2 / y

B)x * 10 ^ 2 / y // s * y / 10 ^ 2

A) Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/y => 10^2/y < 1 => y>10^2
Subtotal precision 3 fractional digits:
(5*10^-4)*10^2/y => 10^2/y < 10 => y>10
Subtotal precision 4 fractional digits:
... 10^2/y < 10^2 => y>1

2桁の精度では、小数桁なしのレートが必要です。例:合計:15,15税率:0,3%=>税0,04545 =>丸められた0,0455税:0,0455 =>合計:15,17

B) Subtotal precision 2 fractional digits:
(5*10^-3)*y/10^2 => y/10^2 &lt; 1 => y < 10^2

aが精度の場合、yはa + 2未満でなければなりません。

数量を処理する場合は注意してください。エラーは多重化されます。したがって、最大10 ^ 5の場合、精度は7にする必要があります。これは、オフセットで計算する場合にのみ心配です。

追加(9.10.2013 Magentoバージョン1.7.0.2)Brutto <=> Netto and Taxes // America <=> old Europe Setsは整数(Cents)であり、マッピング
f(x)= round(a * x)a> 1は全単射ではありません。私の言葉では:すべての価格を含む。価格を除く または時々2つの価格が含まれています。1つの価格を除く または、計算方法に応じて2つの異なる結果を得ることができます

ドイツの実例:

税込価格を入力しようとしました。税:19,95価格を除いて16,76(2桁)を取得します。税金(19%)。19%の税金を計算すると、(16,76 * 0.19)3,18が得られます。(注意:19.95 * 019 / 1.19〜3.19)

したがって、1セントの違いがあります。16,76 => 19.94 16.77 => 19.96

アメリカには19,95の価格はありません-ネットの土地。

したがって、可能な限り元の価格で計算してください。価格を含めるには、入力した価格と税金(壊れた数字)を使用します。

PayPalにはこの不正チェックがあります-今はわかりませんが、PayPalはmagentoが与える番号を追加するだけです。http://fabiankrueger.de/blog/magento-und-paypayl-rundungsfehler/を参照してください 。これが真実ではなく、PayPalが税金または合計を再計算する場合、この問題は解決できません。 。そこで解決します。私にとってはうまくいくようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.