Конвертировать строку со смешанной дробью в PHP - PullRequest
4 голосов
/ 10 марта 2011

Я предполагал, что в PHP будет простой способ преобразовать строку типа 18 5/16 в число с плавающей точкой 18.3125. Я не могу найти простую функцию, чтобы сделать это. Есть ли один, или мне нужно написать свой собственный?

1 Ответ

5 голосов
/ 10 марта 2011

Я не думаю, что такая функция существует - по крайней мере, не в комплекте с PHP.

Написание функции, выполняющей эту операцию, если ваша строка всегда имеет одинаковый формат, не должно быть слишком сложным;например, я бы сказал, что что-то вроде этого должно сработать:

$str = '18 5/16';
var_dump(calc($str));

function calc($str) {
    $int = 0;
    $float = 0;
    $parts = explode(' ', $str);
    if (count($parts) >= 1) {
        $int = $parts[0];
    }
    if (count($parts) >= 2) {
        $float_str = $parts[1];
        list($top, $bottom) = explode('/', $float_str);
        $float = $top / $bottom;
    }
    return $int + $float;
}

, что даст вам следующий вывод:

float 18.3125


И вы можете получить что-токороче с несколькими регулярными выражениями;что-то вроде этого должно сработать, я полагаю:

function calc($str) {
    if (preg_match('#(\d+)\s+(\d+)/(\d+)#', $str, $m)) {
        return $m[1] + $m[2] / $m[3];
    }
    return 0;
}



Иначе, не входит в PHP, но уже существует, возможно, этот класс может помочь: Eval Math .

Отказ от ответственности: я не проверял его - поэтому не совсем уверен, что он будет работать в вашей конкретной ситуации.

...