Yes,Alexander,and I google it,and i found one choice:jep.and maybe javacc is another choice for this. by the way,besides evaluating math expression ,my macro can insert varibles in it. like expr("$a+100*$b"). still I think this is not a good way to do it,maybe next version of velocity will support this expression eval internally,which I think is not a hard task for the talented developers. the macro: #macro(expr $expression) #set($temp--='#set($temp---'+"=$expression)"+'$temp---') #evaluate($temp--) #end 2009/7/20 Alexander <the.malk...@gmail.com>
> Maybe you should find some class that can parse and evaluate math string > (like "1+2+3*3 + 8/2") andthen use it in macro? > > #macro(calc $expr) > $mathHelper.calculate($expr) > #end > > I see you are trying to write ur own parser and I dont think It is a good > idea. There should be a lot of > such classes in internet, as writing calculator is ordinary simple task for > beginner, huh? > > 2009/7/20 lanxiazhi <lanxia...@gmail.com> > > > Hello,everyone,I work on the problem this whole afternoon... > > finally,I decided to end this with a macro: > > #macro(expr $expression) > > #set($temp--='#set($temp---'+"=$expression)"+'$temp---') > > #evaluate($temp--) > > $temp--- > > #end > > #set($a=2) > > #expr("$a*100+200") > > > > which result in a 400. > > wait for an easier way from you . > > thanks > > > > 2009/7/20 lanxiazhi <lanxia...@gmail.com> > > > > > thanks Rupali, > > > I got this problem when I started to think that, can I simply output an > > > expression like #{1+2+200000*3+$a} without a varible? > > > > > > 2009/7/20 Rupali Gupta <r.gup...@mpstechnologies.com> > > > > > > Hi, > > >> > > >> > > >> > > >> Use $velocityCount in place where you need incremental value of some > > >> variable > > >> > > >> Eg: instead of, > > >> > > >> > > >> > > >> #set($a = 0) > > >> > > >> #foreach($mapping in $mappings) > > >> > > >> Do something.. > > >> > > >> #set($a = $a+1) > > >> > > >> > > >> > > >> <label for="journal-$a">Type something</label> > > >> > > >> > > >> > > >> Do it like: > > >> > > >> > > >> > > >> #foreach($mapping in $mappings) > > >> > > >> Do something.. > > >> > > >> <label for="journal- $velocityCount ">Type something </label> > > >> > > >> > > >> > > >> > > >> > > >> $velocityCount increase the value of variable incrementally, without > > >> having > > >> to use ($a= $a+1) > > >> > > >> > > >> > > >> I hope this helps! > > >> > > >> > > >> > > >> Thanks, > > >> > > >> Rupali > > >> > > >> > > >> > > >> > > >> > > >> _____ > > >> > > >> From: lanxiazhi [mailto:lanxia...@gmail.com] > > >> Sent: Monday, July 20, 2009 12:52 PM > > >> To: Velocity Users List > > >> Subject: Re: simple problem > > >> > > >> > > >> > > >> we know this #set($a = $a + 1) will change $a which in some cases may > > not > > >> be > > >> preferable...but thanks anyway. > > >> > > >> 2009/7/20 Alexander <the.malk...@gmail.com> > > >> > > >> Hi, > > >> > > >> > > >> > > >> Use > > >> > > >> > > >> > > >> #set($a = $a + 1) > > >> > > >> > > >> > > >> Correct me if Im wrong but if u use variable like this it would write > > >> "hello" on a single line, where is the problem? > > >> > > >> > > >> > > >> #set($newline="hello") > > >> > > >> $newline > > >> > > >> > > >> > > >> > > > > > >