целое число — конвертировать дробь в плавающее в переполнении стека

Как convert 1/4 to 0.25 в PHP.

В форму вставляю номер как 1/4, В action page Я получаю переменную post как 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

Решение

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

<?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
0

Другие решения

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

на странице действий сначала взорвите введенное значение, например:

$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: Просто для удовольствия, я сделал версию для вашего кода только с 1 вводом

//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), поэтому я прошу вас быть терпеливым с этим.

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

Привет

-1
По вопросам рекламы [email protected]