2016-01-11 13 views
-5

Мне нужно удалить нули из конца строки, но только до двух мест справа от десятичной точки.Удалить определенные символы справа от строки

Я передал отформатированную цену как строку, и эта цена составляет до 5 знаков после запятой. Мне нужно снять ненужные нули от цены, но оставив по крайней мере 2 справа от десятичной точки. Например:

£ 0,00230 -> £ 0,0023 и £ 1,50000 -> £ 1,50

Любая помощь будет оценен по достоинству!

+1

Ваш ожидаемый o utput сбивает с толку '0,00230 -> 0,0027' результат - 4 десятичных разряда, но ваш вопрос предполагает, что вы хотите только 2 десятичных знака? – Steve

+0

Я должен сказать, что, как мне кажется, я уже пламен (!), Что я могу использовать rtrim, чтобы обрезать нуль, но я не могу найти способ заставить его не обрезать нуль справа от десятичной точки персонаж. – Mike

+0

, где цена равна 2 десятичным знакам, например 1,50 фунта стерлингов, да, мне нужно это, чтобы отобразить это, но его отображение £ 1,50000 – Mike

ответ

1

Заключительное и последнее обновление надежно ... обрезать все нули справа, затем добавить 1 или 2 нули, если необходимо.

function format_number($price) { 
    if (preg_match('~^£\d+$~', $price)) { 
     $price .= '.00'; 
    } else { 
     $price = rtrim($price, '0'); 
     if (preg_match('~\.$~', $price)) { 
      $price .= '00'; 
     } elseif (preg_match('~\.\d$~', $price)) { 
      $price .= '0'; 
     } 
    } 
    return $price; 
} 
echo format_number('£230') . "\n"; 
echo format_number('£230.12') . "\n"; 
echo format_number('£23.024') . "\n"; 
echo format_number('£230.00024') . "\n"; 
echo format_number('£230.0240') . "\n"; 
echo format_number('£230.2') . "\n"; 

Выход:

£230.00 
£230.12 
£23.024 
£230.00024 
£230.024 
£230.20 
+0

Я просто заметил, что 'money_format()' будет неопределенным под Windows :(, угадайте, это время Linux – Andrew

+0

Спасибо, что clayton просто попробовал это, но его округление 5 знаков после запятой до 2. – Mike

+0

Yah , сделал этот пост, когда я выбежал из двери и не заметил этой части вашего поста, обновит свой ответ, когда вернусь домой. – Clay

0

Попробуйте этот код:

$value = "0.00230"; 
$new_value = explode(".", $value); 
$substring = substr($new_value[1], 0, 1); 

if($substring == "00"){ 
    $value = number_format($value, 4, '.', ''); 
} else { 
    $value = number_format($value, 2, '.', ''); 
} 
echo $value; 
0

Вы можете удалить символ, литой, чтобы плавать, чтобы удалить конечные нули, и использовать number_format, чтобы добавить их обратно, если это необходимо :

function fixCurrency($string, $symbol){ 

    //remove £, and any trailing zeros 
    $val = (float) ltrim($string, $symbol); 
    //add back zeros if needed 
    $parts = explode('.', $val); 
    if(!isset($parts[1]) || strlen($parts[1]) < 2){ 
     $val = number_format($val, 2); 
    } 
    return $symbol . $val; 

}