Speaking strictly about the code and not the approach in general.
Use array destructuring to get nicer, more readable variables:
[$whole, $decimal] = explode('.', $rating);
Some syntactic sugar to replace if/else:
$rate_emp = ($decimal ? 4 : 5) - $whole;
Loops can be replaced by str_repeat(). Optionally, you can check if repeat count is less than 1 and avoid the function call if it is. If there's a chance that rating could be above 5.0, this is necessary to avoid errors.
echo str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);
Generating and catching the output seems unnecessary, especially since you're doing it using PHP syntax. Write to string directly:
function show_star_rating_review()
{
global $post;
$rating = $rating = get_field('rating', $post);
[$whole, $decimal] = explode('.', $rating);
$rate_emp = ($decimal ? 4 : 5) - $whole;
$output = '<div class="awb-stars-rating awb-stars-rating-1 awb-stars-rating-no-text" aria-label="Rating: ' . $rating . ' out of 5">'
. '<style>.awb-stars-rating-1 .awb-stars-rating-filled-icon{margin-right:2px;color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-empty-icon,.awb-stars-rating-1 .awb-stars-rating-partial-icon-wrapper{margin-right:2px;}.awb-stars-rating-1 .awb-stars-rating-partial-icon{color:#ffd041;}.awb-stars-rating-1 .awb-stars-rating-icons-wrapper{color:#dbdbdb;font-size:23px;}</style>'
. '<div class="awb-stars-rating-icons-wrapper">'
. str_repeat('<i class="fa-star fas awb-stars-rating-filled-icon"></i>', $whole);
if ($decimal) {
$output .= '<i class="fa-star fas awb-stars-rating-partial-icon-wrapper"><i class="fa-star fas awb-stars-rating-partial-icon" style="width:' . $decimal . '0%;"></i></i>';
}
$output .= str_repeat('<i class="fa-star fas awb-stars-rating-empty-icon"></i>', $rate_emp)
. '</div>'
. '</div>';
return $output;
}