купон woocommerce с точностью до 1 знака после запятой - PullRequest
1 голос
/ 01 апреля 2020

В моем магазине я использую этот код для округления десятичных знаков в купонах. Можно ли округлять числа от 99,555 до 99,9? Мне нужен только один десятичный знак.

/**
 * Round off decimals for coupons
 **/
function filter_woocommerce_coupon_get_discount_amount( $discount, $discounting_amount, $cart_item, $single, $instance ) { 
    $discount = ceil( $discount );
    return $discount; 
}   
add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете использовать функцию PHP round (вместо ceil), которая имеет параметр $precision, который можно установить на 1. Это округлит до точности шкафов, которая для 9.555 равна 9.6:

/**
* Round off decimals for coupons
**/

function filter_woocommerce_coupon_get_discount_amount( $discount, 
$discounting_amount, $cart_item, $single, $instance ) { 
    $discount = round( $discount, 1 );
    return $discount; 
} 

add_filter( 'woocommerce_coupon_get_discount_amount', 
'filter_woocommerce_coupon_get_discount_amount', 10, 5 );

Если вы хотите преобразовать 9.555 в 9.9, то вам придется создать эту логику c, например, вот так:

/**
* Round off decimals for coupons
**/

function filter_woocommerce_coupon_get_discount_amount( $discount, 
$discounting_amount, $cart_item, $single, $instance ) { 

    $disvount_floor = floor($discount);

    // This will return x.99 if $discount decimal number is > 0.5
    if (fmod($discount, $disvount_floor) > 0.5) {
        return "{$disvount_floor}.9";
    }

    return $discount; 

} 

add_filter( 'woocommerce_coupon_get_discount_amount', 
'filter_woocommerce_coupon_get_discount_amount', 10, 5 );
...