Newsgroup: it.comp.www.php
Titolo: calcolo su stringa

salve a tutti,
c'e' un sistema piu' "lineare" del parsing della stringa per ottenere un
calcolo da una stringa del genere ?
(MA+I2*128)+25%
sono formule che hanno riferimenti a elementi di tabelle postgresql che
cambiano a seconda della qualifica ...
grazie anticipate ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

 
ma la formula è sempre la stessa ?
se non è sempre la stessa, da dove la prendi di volta in volta la formula ?
ciao
Alesi_27

 Alesi_27
ciao e grazie ...


 > ma la formula č sempre la stessa ?


 Luca Beltrame
ciao ...


 ciao ...
risolto ... grazie lo stesso ;-))
ciao ..


 ciao ..
...purtroppo non ho seguito il newsgroup in questi giorni e quindi mi sono
perso la tua richiesta di aiuto... sorry :)
Mi fa piacere che comunque tu abbia risolto il problema, anche se non ho
capito quale fosse :p(arrotondamento dei valori o priorità nelle
operazioni?)
Saluti
LB

 LB
ciao ...


 while ($end !== false)
[CUT]
Avevo scritto un papiro di commento OT (a favore dei niubbi) su come
utilizzare correttamente le istruzioni di controllo e i valori booleani
(dato molto spesso sul lavoro mi è capitato di vedere cose del tipo "if
(<espressione> == true)"... o_O  ), ma proprio alla fine mentre facevo un
esempio dei casi in cui è necessario utilizzare l'operatore di comparazione
stretta === mi sono accorto che è proprio il modo in cui giustamente l'hai
usato tu... ^_^
Sigh lavoro inutile... lo salverò nel caso servisse... :)
Saluti
LB

 LB
ciao e grazie mille per l'interessamento ...


 dai ... non fare cosi' ... mo' mi sento in colpa ;-))
noproblem ;-)
Saluti
LB

> e qual'è il sorgente della funzione Calcolo?
Prova quest'altro:
function CALC_value($variable, $context)
{
	if (!isset($context[$variable]))
		trigger_error("CALC: undefined variable $variable",
E_USER_ERROR);
	return round($context[$variable], 5);
}
function Calcolo($stringa)
{
        $valori = array(
                'MC'    => 12,
                'A3'    => 3.14159,
                'B8'    => 14,
        );
        $num = preg_replace(
                array(
                        '/([0-9]+)%/se',
                        '/([A-Z]+[0-9]*)/sei'),
                array(
                        '\\1/100',
                        'CALC_value(\'\\1\', $valori)'
                ),
                $stringa);
        return eval("return $num;");
}
A dire il vero questo opera in precisione piu' elevata sulle operazioni,
ovvero
	0.00001*2/2
fa	0.00001 anziche' 0.
Ma non penso che la cosa sia significativa, se poi il calcolo lo tronchi
al secondo decimale. Ci vorrebbe un calcolo ad hoc perche' salti fuori.
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 al secondo decimale. Ci vorrebbe un calcolo ad hoc perche' salti fuori.
Concordo, in base a quanto detto.
Commento finale per Antonio: io non mi complicherei la vita e userei un
semplice eval, ma se hai la necessità di far "validare" il sistema di
calcolo delle paghe (ovvero deve rispettare dei metodi che sono
probabilmente quelli utilizzati al momento), la tua procedura unita alla
funzione di Leonardo sono certamente migliori, dato che ti assicurano
l'arrotondamento alla quinta cifra decimale dopo ogni operazione: non ho
fatto alcun test, ma pur utilizzando un eval per ogni coppia di parentesi
non dovrebbe essere molto più lenta di un eval singolo, a meno che tu non
debba elaborare enormi quantità di dati... ^_^
Ah, dimenticavo: usa parentesi per "racchiudere" ogni operazione, così
((MC+I1+I2+SA+AC)/26)*30%
invece di così
(MC+I1+I2+SA+AC)/26*30%
altrimenti ho notato una variazione nell'ultima (12esima) cifra decimale ;-)
(viene effettuato un arrotondamento in meno)
Saluti
LB

 wrote:
[CUT]
grazie mille per l'aiuto ... adesso provo e, in caso di problemi, riposto ..
ciao ...


 wrote:
[CUT]
grazie per l'aiuto ... vi faccio sapere ...
