Visualizzazione risultati 1 fino 12 di 12
Like Tree3Likes
  • 2 Post By mzanella
  • 1 Post By alemoppo

Discussione: Convertire variabile stringa (ma...non una qualsiasi) in float.

  1. #1
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito Convertire variabile stringa (ma...non una qualsiasi) in float.

    A causa di una serie di vicessitudini (1. una funzione replace) ottengo una variabile contentente: pow(2,2) ovvero (2^2):
    1.
    Codice PHP:
    $rimpiazzo=str_replace("x", $incremento, $funzione);
    Il problema è che ora vorrei il risultato, 2^2=4, mentre la variabile risulta stringa e da come risultato zero. Cercando su varie guide online ho provato:
    1. con la funzione floatval in modo tale da convertire la variabile stringa in float ma il risultato rimane comunque zero.
    Codice PHP:
    $rimpiazzo=floatval($rimpiazzo);
    2. ho provato semplicemente ad aggiungere 0 (zero) alla variabile pensando che in php le variabili si adattano al contesto, ma il risultato rimane comunque zero.
    Codice PHP:
    $rimpiazzo=0+$rimpiazzo;
    Come potrei risolvere tale questione?
    Grazie in anticipo

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,187

    Predefinito

    Per ora mi viene in mente solo:
    Codice PHP:
    $stringa = '2^2';

    $valore = explode('^', $stringa);
    $valore = pow($valore[0], $valore[1]);

    var_dump($valore);
    Ciao!

  3. #3
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    L'idea è buona ma il problema è che non è generale. Infatti se a seguito della funzione replace si ottiene un risultato diverso da pow (2,2) non viene gestito dell'algoritmo. Cioè se la funzione replace restituisce pow (3,2) la variabile stringa contiene comunque 2^2.

  4. #4
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,187

    Predefinito

    Non ho capito, puoi spiegare con un esempio?

    Ciao!

  5. #5
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Certo. Ci provo:
    1.Lo scopo del programma è quello che l'utente deve inserire una funzione matematica in un form e il programma effettua vari calcoli (l'integrazione con il metodo dei rettangoli...ma va bè non è questo il problema);
    2. L'utente quindi inserisce una funzione. Per esempio: pow(x,2)+2 corrispondente a (x^2+2).
    [Anche questo sarebbe un problema perchè l'utente è costretto ad inserire pow.. poichè in php l'operatore "^" non è considerato l'esponenziale...ma va bè non è questo il problema]
    3. Una volta che ho assegnato ad una variabile la funzione data devo sostituire ad "x" alcuni valori:
    $rimpiazzo=str_replace("x", $valore, $funzione);
    Es.
    a. valore=2 pow(2,2)+2 -->(2^2+2)
    b. valore=-2 pow(-2,2)+2 -->((-2)^2+2)
    c. valore=3 pow(3,2)+2 -->(3^2+2)
    4. Una volta sostituito per ogni valore devo calcolarne il risultato;
    Es.
    a. valore=2 pow(2,2)+2 -->(2^2+2) -->6
    b. valore=-2 pow(-2,2)+2 -->((-2)^2+2) -->6
    c. valore=3 pow(3,2)+2 -->(3^2+2) -->11
    --Il problema è appunto che la funzione restituisce una variabile stringa e risulta difficile convertirlo in numero (risultato)..
    Spero di essere stato chiaro.
    Grazie mille.
    Ciao

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    i float di php sono con . e non virgola. Facciamo finta che recuperi 2,2 (2^2+2) tramite la variabile POST tramite l'interazione di una form azionata da un utente
    Codice PHP:
    <?php
    if(isset($_POST['num'])){
    $stringa = $_POST['num'];

    $valore[1] = 0;
    $valore = explode(',', $stringa);
    // si potrebbe fare anche così if(((($valore = array(0 => (int) $valore[0], 1 => (int) $valore[1])) !='' && $valore[0]) != 0 && $valore[1]) != 0){
    // senza la prima opzione aggiungo (int)
    $var1 = (int) $valore[0];
    $var2 = (int) $valore[1];
    if(
    $var1 != 0 AND $var2 != 0){
    //moltiplico per se stesso
    //elevato alla seconda
    // sommo il secondo valore
    $var1 = $var1 * $var1+ $var2;

    var_dump($var1,$var2);
    }else{
    echo
    'qualcosa non a funzionato!';
    }
    }
    ?>
    Ultima modifica di darbula : 12-03-2016 alle ore 04.00.18

  7. #7
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    pow (2,2) vuol dire 2^2..
    pow (3,4) vuol dire 3^4..es

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se ho capito bene, il tuo problema è la valutazione di un'espressione aritmetica.
    La soluzione sporca e rapida consiste nell'uso di eval. Assumendo che $expr sia la stringa contenente l'espressione da valutare con il valore già sostituito (ad es. "pow(3, 2) + 2"):
    Codice PHP:
    $result = eval("return " . $expr . ";");
    Osserva che quest'approccio funziona solo a condizione che $expr sia un'espressione aritmetica valida in PHP, trasformare e validare la stringa inserita dall'utente è a carico tuo. Inoltre la funzione eval può essere [molto] pericolosa, come viene spiegato nella documentazione di PHP.

    L'alternativa più formale e corretta è servirti di un parser per espressioni aritmetiche. Così facendo non hai problemi di sicurezza, né devi costringere l'utente ad utilizzare pow al posto dell'operatore di elevamento a potenza.
    alemoppo and SchoolCommunity like this.

  9. #9
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Ho provato a cercare in internet se qualcuno avesse condiviso qualche parser per interpretare le funzioni matematiche. Ho trovato la seguente soluzione (EvalMath): http://stackoverflow.com/questions/1...-string-in-php .
    Ora ho provato semplicemente come mostra un esempio la libreria in questo modo (copiando la libreria in un file nominato evalmath.class.php) e in un altro file:
    Codice PHP:
    <?php
    include('evalmath.class.php');
    $m = new EvalMath;
    $result = $m->evaluate('-8(5/2)^2*(1-sqrt(4))-8');
    echo
    "<b><h1>".$result."</b></h1>";
    ?>
    Il problema è che ottengo un errore e mi copia praticamente tutta la libreria nella pagina.

  10. #10
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,187

    Predefinito

    Apri il file "evalmath.class.php" con un editor di testo e all'inizio aggiungici:
    Codice PHP:
    <?php
    Alla fine
    Codice PHP:
    ?>
    Ciao!
    SchoolCommunity likes this.

  11. #11
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Siete veramente fantastici.
    Grazie mille per la collaborazione e il supporto che mi avete dato.
    Ora provo a completare il codice, se avrò ulteriori problematiche busserò ancora alla porta...
    Grazie davvero.
    Questa è una fantastica community.

  12. #12
    Guest

    Predefinito

    Non ti consiglio di usare eval e nemmeno in javascript, eval cancellala proprio...
    Leggi qui ciao.

    http://forum.it.altervista.org/php-m...ico-input.html

    Tieni a bada che quello che l'utente scrive nella input, cioè devi impedire i print etc...etc...sono costrutti che vanno gestiti bene...
    Ultima modifica di fractalcosmo : 12-03-2016 alle ore 15.13.15

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •