CS-Cart は、デフォルトでは小数点以下第2位を四捨五入します。
お客様が大量に商品をご購入される場合、商品価格や税率の値に小数点以下2桁が含まれる場合、税金や割引、合計金額の計算に10分の1や100の位の誤差が生じる可能性がありますが、以下の2ステップで計算精度を上げることができます。
ステップ 2が正しく機能するには、管理画面の上部メニューから「設定 > 注文手続き」の「税額の算出基準」を「小計」に設定する必要があります。
「税額の算出基準」が単価に基づいている場合、ステップ 1を完了するだけで計算の精度が向上しますが、その場合、PayPalの支払方法がECサイトやマーケットプレイスサイトで機能しなくなります。
ステップ 1. fn.common.php を変更する
CS-Cart app/functions ディレクトリにある fn.common.php ファイルを開き、次の行を探します。
$price = sprintf('%.' . $decimals . 'f', round((double) $price + 0.00000000001, $decimals));
管理画面の上部メニューから「設定 > 注文手続き」の「税額の算出基準」の設定に合わせて、次の行のいずれかに置き換えファイルを保存します。
小計の場合
$price = sprintf('%.' . $decimals . 'f', round((double) $price + 0.00000000001, 4));
単価の場合
$price = sprintf('%.' . 4 . 'f', round((double) $price + 0.00000000001, 4));
これにより、CS-Cart は小数点以下第4桁を四捨五入します。
この変更した「4」を希望の数値に置き換えることにより、任意の小数点以下の桁数を設定できます。
ステップ 2. PayPal ユーザー向けの変更
PayPal は、xx.xx (小数点以下2桁) の価格形式のみをサポートします。
計算精度を高めた上で、支払方法として PayPal を使用する場合は、次の変更を加えます。
以下の変更は、管理画面の上部メニューから「設定 > 注文手続き」の「税額の算出基準」を設定し、ステップ 1で説明したように fn.common.php ファイルを変更した場合にのみ機能します。
CS-Cart app/functions ディレクトリにある fn.common.php ファイルを開きます。
次のコードをファイルの末尾に追加してファイルを保存します。
function fn_format_price_paypal($price = 0)
{
return sprintf("%.2f", round((double) $price + 0.00000000001, 2));
}
function fn_format_price_by_currency_paypal($price, $currency_from = CART_PRIMARY_CURRENCY, $currency_to = CART_SECONDARY_CURRENCY)
{
$currencies = Registry::get('currencies');
$currency_from = $currencies[$currency_from];
$currency_to = $currencies[$currency_to];
$result = fn_format_price_paypal($price / ($currency_to['coefficient'] / $currency_from['coefficient']), CART_SECONDARY_CURRENCY);
/**
* Update converted value
*
* @param float $price value to be converted
* @param string $currency_from in what currency did we get the value
* @param string $currency_to in what currency should we send the result
* @param float $result converted value
*/
fn_set_hook('format_price_by_currency_paypal_post', $price, $currency_from, $currency_to, $result);
return $result;
}
CS-Cart の app/addons/paypal/payments ディレクトリにある paypal.php ファイルを開き、以下の行を変更します。
このコードを探して | $paypal_shipping = fn_order_shipping_cost($order_info); |
---|---|
置き換える | $paypal_shipping = fn_format_price_paypal(fn_order_shipping_cost($order_info)); |
fn_format_price のすべてのインスタンスを fn_format_price_paypal に置き換えます。
このコードを探して | fn_format_price( |
---|---|
置き換える | fn_format_price_paypal( |
fn_format_price_by_currency のすべてのインスタンスを fn_format_price_by_currency_paypal に置き換えます。
このコードを探して | fn_format_price_by_currency( |
---|---|
置き換える | fn_format_price_by_currency_paypal( |
ファイルを保存。
CS-Cart の app/addons/paypal/payments ディレクトリにある全ての .php ファイルに対して以下の手順を実行します。
fn_format_price のすべてのインスタンスを fn_format_price_paypal に置き換えます。
このコードを探して | fn_format_price( |
---|---|
置き換える | fn_format_price_paypal( |
fn_format_price_by_currency のすべてのインスタンスを fn_format_price_by_currency_paypal に置き換えます。
このコードを探して | fn_format_price_by_currency( |
---|---|
置き換える | fn_format_price_by_currency_paypal( |
ファイルを保存。