By default, CS-Cart rounds decimals to 2 decimal places. If a customer buys a large number of products, and product price or tax rate value has 2 decimal places, it may lead to inaccuracy in the nearest tenth or hundredth of tax, discount, and total value calculation.
You can increase the calculation accuracy in 2 steps.
Important
Your Tax calculation method based on setting under Settings → General must be set to Subtotal for the second step to work properly.
If your tax calculation method is based on Unit price, you only need to complete Step 1 to get the increased calculation accuracy, but then PayPal payment methods will not work in your shop.
1.1. Open the fn.common.php file located in the app/functions directory of your CS-Cart installation.
1.2. Find this line of the code:
$price = sprintf('%.' . $decimals . 'f', round((double) $price + 0.00000000001, $decimals));
1.3. Replace this line with one of the following lines, depending on the value of the Tax calculation method based on setting under Settings → General:
For Subtotal, use this line:
$price = sprintf('%.' . $decimals . 'f', round((double) $price + 0.00000000001, 4));
For Unit price, use this line:
$price = sprintf('%.' . 4 . 'f', round((double) $price + 0.00000000001, 4));
1.4. Save the file. This will make CS-Cart round decimals to 4 digits.
Note
You can set any number of digits after decimal point by replacing 4 with the number you want.
PayPal only supports xx.xx (2 decimal places) price format. If you want to increase the calculation accuracy and use a PayPal payment method, make the following changes:
Important
The changes below will work only if you set your Tax calculation method based on setting under Settings → General to Subtotal and modify the fn.common.php file as described in Step 1.
2.1. Open the fn.common.php file located in the app/functions directory of your CS-Cart installation
2.2. Add the following piece of the code to the end of the file:
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;
}
2.3. Save the file.
2.4. Open the paypal.php file in the app/addons/paypal/payments directory of your CS-Cart installation.
2.5. Change the following line:
Find this line: | $paypal_shipping = fn_order_shipping_cost($order_info); |
---|---|
Replace it with: | $paypal_shipping = fn_format_price_paypal(fn_order_shipping_cost($order_info)); |
2.6. Replace all instances of fn_format_price with fn_format_price_paypal:
Find this code: | fn_format_price( |
---|---|
Replace it with: | fn_format_price_paypal( |
2.7. Replace all instances of fn_format_price_by_currency with fn_format_price_by_currency_paypal:
Find this code: | fn_format_price_by_currency( |
---|---|
Replace it with: | fn_format_price_by_currency_paypal( |
2.8. Save the file.
2.9. Complete the steps below for all the .php files in the app/addons/paypal/payments directory of your CS-Cart installation:
Open the file.
Replace all instances of fn_format_price with fn_format_price_paypal:
Find this code: | fn_format_price( |
---|---|
Replace it with: | fn_format_price_paypal( |
Replace all instances of fn_format_price_by_currency with fn_format_price_by_currency_paypal:
Find this code: | fn_format_price_by_currency( |
---|---|
Replace it with: | fn_format_price_by_currency_paypal( |
Save the file.
Questions & Feedback
Have any questions that weren't answered here? Need help with solving a problem in your online store? Want to report a bug in our software? Find out how to contact us.