2012-11-23 14 views
5

MagentoでVATの奇妙な丸め問題が発生しました。私の製品のセットアップは です*製品価格は20%の付加価値税を含みます183.59Magento税務丸め問題

私はバスケットに30項目を追加し、30 * 183.59 = 5507.70の費用がかかります。私はこの値をバスケット/チェックアウトで見ることができるので、それは問題ありません。もし私がバスケットに1つだけの項目があればOKです。

また、最終的な付加価値税は5507.70 * 120分の20 = 917.95、私は918.00

は、あなたがこの問題を解決するためにどのように任意のアイデアを持っているか、どこで見てみましょうか取得していますでしょうか?前もって感謝します。

答えて

8

私は解決策を見つけました。私はSystem> VAT> Tax Calculation MethodをUnit PriceからRow Totalに変更しました。here

私が見つけた問題はcore/storeモデルです。私はroundPriceメソッドを書き換えて丸め精度をそこで変更しなければならなかった。前回の丸め演算デルタに基づいて、Magentoの中

public function roundPrice($price) 
{ 
    return round($price, 4); 
} 
+1

リライトは間違いなく、適切な解決策ではありません!あなたにはうまくいきましたが、PayPalによる支払いに問題が生じます(有効な注文には「疑わしい詐欺」と表示されます)。この書き換えを使用するときは注意してください! – simonthesorcerer

+0

はい、同意します。変更された丸めによって問題が1か所で修正されましたが、別の場所で修正されました。基本的にすべてのシナリオで完璧に機能するソリューションを用意することはできないと思います。 – Jaro

+1

私は最終的に公式知識ベースのエントリでいくつかの問題を回避することができました:http://www.magentocommerce.com/knowledge-base/entry/magento-ce-18-ee-113-tax-calc – simonthesorcerer

4

情報

ラウンド価格。

app/code/core/Mage/Tax/Model/Sales/Total/Quote/Tax.php:1392 app/code/core/Mage/Tax/Model/Sales/Total/Quote/Subtotal.php:719

protected function _deltaRound($price, $rate, $direction, $type = 'regular') 
{ 
    if ($price) { 
     $rate = (string)$rate; 
     $type = $type . $direction; 
     // initialize the delta to a small number to avoid non-deterministic behavior with rounding of 0.5 
     $delta = isset($this->_roundingDeltas[$type][$rate]) ? $this->_roundingDeltas[$type][$rate] : 0.000001; 
     $price += $delta; 
     $this->_roundingDeltas[$type][$rate] = $price - $this->_calculator->round($price); 
     $price = $this->_calculator->round($price); 
    } 
    return $price; 
} 

時には、これは、高いデルタの計算エラー($this->_calculator->round($price))に起因するエラーを引き起こす可能性があります。たとえば、この理由から、価格は±1セントの範囲で異なる場合があります。これを避けるために

ソリューション

、あなたはデルタ計算の精度を向上させる必要があります。

app/code/core/Mage/Tax/Model/Sales/Total/Quote/Tax.php:1392 app/code/core/Mage/Tax/Model/Sales/Total/Quote/Subtotal.php:719

01:

変更

$this->_roundingDeltas[$type][$rate] = $price - $this->_calculator->round($price); 

$this->_roundingDeltas[$type][$rate] = $price - round($price, 4); 

への変更は、両方のファイルになされる必要があります

コアファイルを変更またはハックしないでください!書き直してください!

解決策はMagento 1.9.xのさまざまなバージョンでテストされましたが、これは以前のバージョンではうまくいく可能性があります。

P.S.

変更点roundPrice関数は、以下に示すように、丸め誤差の問題を解決できますが、他の原因(たとえば、小数点以下2桁までの丸めが必要なプラットフォームもあります)があります。

app/code/core/Mage/Core/Model/Store.php:995

public function roundPrice($price) 
{ 
    return round($price, 4); 
}