2014-11-24 2 views
0

Как convert 1/4 to 0.25 в PHP.Преобразование фракции для плавания в PHP

В форме я вставляю номер как 1/4. В action page Я получаю сообщение переменной как 1/4. Как это можно преобразовать в 0.25. Я думаю, что на странице действия это получается как строка. Вот почему он отображается как 1/4. Но мне нужно 0.25. Как я могу это сделать ??

главная страница

<input type="text" name="a" id="a"> 

страница действия

$a = $_POST['a']; 
echo $a; //gives 1/4 but need 0.25 

Пожалуйста, помогите ..

+0

проверить мой ответ, я предоставил несколько хороших способов решения этой проблемы ваше;) принять особый взгляд на мое предложение для вашего кода и внимательно посмотреть на последнюю версию –

ответ

0

Вы можете использовать функцию следующим образом:

<?php 

    function calculate_string($mathString) { 
     $mathString = trim($mathString); 
     $mathString = str_replace ('[^0-9\+-\*\/\(\) ]', '', $mathString); 

     $compute = create_function("", "return (" . $mathString . ");"); 
     return 0 + $compute(); 
    } 

    echo calculate_string("1/4"); 


?> 

Выход:

0.25 
+1

с помощью 'Eval()' обычно плохо. использование 'eval()' по предоставленным пользователем данным, безусловно, плохо. –

+0

@MarcinOrlowski обновил мой ответ! Сделал функцию! – Rizier123

1

один из возможных способов заключается в следующем:

в странице действий, первый взрывают значение как занесены :

$explode = explode('/', $_POST['a']); 

тогда вы просто разделить их: D

$result = $explode[0]/$explode[1]; 
echo $result; //echoes 0.25 

L.E: лучший способ сделать это, на мой взгляд было бы использовать 3 входа. Один с первым номером, один с операцией и второй со вторым номером. В этом случае вы можете сделать реальный калькулятор и выполнять обычные операции в странице действий, как это:

на странице дисплея:

<input type="text" name="first_no" id="first_no"> 
<input type="text" name="operation" id="operation"> 
<input type="text" name="second_no" id="second_no"> 

в странице действия:

switch($_POST['operation']) { 
    case '+'; 
    $result = $_POST['first_no'] + $_POST['second_no']; 
    break; 
    case '-'; 
    $result = $_POST['first_no'] - $_POST['second_no']; 
    break; 
    case '*'; 
    $result = $_POST['first_no'] * $_POST['second_no']; 
    break; 
    case '/'; 
    $result = $_POST['first_no']/$_POST['second_no']; 
    break; 
    //and so on... if you need more 
} 

echo $result; 

L.E2: Просто для удовольствия я сделал версию для вашего кода только с одним входом

//get index 
preg_match("/\D/is", $_POST['a'], $mList, PREG_OFFSET_CAPTURE); 
$index = $mList[0][1]; 

//get operation 
$operation = substr($string, $index, 1); 

//get numbers 
$explode = explode($operation, $string); 

//produce result 
switch($operation) { 
    case '+'; 
    $result = $explode[0] + $explode[1]; 
    break; 
    case '-'; 
    $result = $explode[0] - $explode[1]; 
    break; 
    case '*'; 
    $result = $explode[0] * $explode[1]; 
    break; 
    case '/'; 
    $result = $explode[0]/$explode[1]; 
    break; 
    //and so on... if you need more 
} 

echo $result; 

надеюсь, что это помогает: D

-1

Ну вы можете использовать Eval здесь, но будьте осторожны! Непосредственный анализ $ _POST вещей для eval делает ваш сценарий чрезвычайно опасным для вашего веб-сервера, если вы не избегаете ввода правильно!

Если вы уверены, что вы получите что-то вроде 1/4 или 1/2 это будет делать:

echo eval("return ".$_POST['a'].";"); 

, но, как я сказал. БУДЬТЕ ОСТОРОЖНЫ С ЭТОЙ , если кто-то хочет что-то плохое, он может просто ввести exec('init 0') на ваш вход, и ваш сервер отключится, если ваш веб-сервер получит разрешение на это (это всего лишь одна из бесчисленных вультурности к необеспеченному eval), поэтому, пожалуйста, будьте терпеливы с этим.

Второй метод - разделение чисел и их разделение. Но у этого наверняка будет много проблем с форматом.

Привет

Смежные вопросы