With this Julia code: x = -2.34e-12; for i in 1:5 x=-x*5000. println("$i $x") end
I get this output: 1 1.17e-8 2 -5.8500000000000006e-5 3 0.29250000000000004 4 -1462.5000000000002 5 7.312500000000001e6 I don't think this is too bad. True, the output is a bit longer, but I actually prefer it, because you can copy/paste the numbers back into Julia and be sure you're getting the exact number that was used in the code. -- mb On Thu, Sep 24, 2015 at 2:39 PM, lawrence dworsky <m...@lawrencedworsky.com> wrote: > Hi Tom > > Sorry to take so long to get back to you, I had to go away for a couple of > days. Thanks for the installation information, @fmt is working fine now. > It's still not as useful as the Fortran print * formatting however because > it ​requires the user to know what's coming. For example, the Fortran code > > x = -2.34e-12 > do i = 1, 5 > x = -x*5000. > print *, i, x > end do > > produces > > 1 1.170000E-08 > 2 -5.850000E-05 > 3 0.292500 > 4 -1462.5 > 5 7.312501e+06 > > As you can see, print * figured out when exponential notation is necessary > and automatically used it. > > I'm retired now, but when I was working I spent a lot of time writing > numerical analysis programs for various engineering issues (elastic > material deformation, electron trajectories, etc.) While a program was > being developed I didn't care about the aesthetics of my printout, I just > needed useful information - and early on, numerical or algebraic or > programming errors could easily produce results off by 10 order of > magnitude! > > I think a capability such as this in Julia would be heavily used. I wish I > had the expertise to write it. > > Larry > > > > On Tue, Sep 22, 2015 at 4:59 PM, Tom Breloff <t...@breloff.com> wrote: > >> Sorry I wasn't expecting you to run it... just comment. You'll have to >> do: >> >> Pkg.rm("Formatting") >> Pkg.clone("https://github.com/tbreloff/Formatting.jl.git") >> Pkg.checkout("Formatting", "tom-fmt") >> >> Let me know if that works. >> >> On Tue, Sep 22, 2015 at 5:52 PM, lawrence dworsky < >> m...@lawrencedworsky.com> wrote: >> >>> I'm afraid my beginner status with Julia is showing: >>> >>> I ran Pkg.add("Formatting"), and then using Formatting came back >>> with a whole bunch of warnings, most about Union(args...) being >>> depricated, use Union(args....) instead. >>> >>> When all is said and done, fmt_default! gives me a UndefVarError. >>> >>> Help! >>> >>> >>> >>> On Tue, Sep 22, 2015 at 2:45 PM, Tom Breloff <t...@breloff.com> wrote: >>> >>>> Thanks Larry, that's helpful. Just for discussions sake, here's a >>>> quick macro that calls my proposed `fmt` method under the hood, and does >>>> something similar to what you showed. What do you think about this style >>>> (and what would you do differently)? >>>> >>>> using Formatting >>>> >>>> macro fmt(args...) >>>> expr = Expr(:block) >>>> expr.args = [:(print(fmt($(esc(arg))), "\t\t")) for arg in args] >>>> push!(expr.args, :(println())) >>>> expr >>>> end >>>> >>>> >>>> And then an example usage: >>>> >>>> In: >>>> >>>> x = 1010101 >>>> y = 555555.555555555 >>>> fmt_default!(width=15) >>>> >>>> @fmt x y >>>> >>>> fmt_default!(Int, :commas) >>>> fmt_default!(Float64, prec=2) >>>> >>>> @fmt x y >>>> >>>> >>>> Out: >>>> >>>> 1010101 555555.555556 >>>> 1,010,101 555555.56 >>>> >>>> >>>> >>>> On Tuesday, September 22, 2015 at 3:08:35 PM UTC-4, lawrence dworsky >>>> wrote: >>>>> >>>>> Hi Tom >>>>> >>>>> What I like about it is that you can just use print *, dumbly and it >>>>> always provides useful, albeit not beautiful, results. When I'm writing a >>>>> program, I use print statements very liberally to observe what's going on >>>>> - >>>>> I find this more convenient than an in-line debugger. >>>>> >>>>> As the last line in my program below shows, it's easy to switch to >>>>> formatted output when you want to. The formatting capability is pretty >>>>> thorough, I'm just showing a simple example. >>>>> >>>>> This Fortran program doesn't do anything, it just illustrates what the >>>>> print statement produces: >>>>> >>>>> >>>>> real x, y >>>>> integer i, j >>>>> complex z >>>>> character*6 name >>>>> >>>>> x = 2.6 >>>>> y = -4. >>>>> i = 36 >>>>> j = -40 >>>>> z = cmplx(17., 19.) >>>>> name = 'Larry' >>>>> >>>>> print *, x, y, i, j, z >>>>> print *, 'x = ', x, ' and j = ', j >>>>> print *, 'Hello, ', name, j >>>>> print '(2f8.3, i5)', x, y, j >>>>> >>>>> stop >>>>> end >>>>> >>>>> >>>>> The output is: >>>>> >>>>> 2.60000 -4.00000 36 >>>>> -40 (17.0000, 19.0000) >>>>> x = 2.60000 and j = -40 >>>>> Hello, Larry -40 >>>>> 2.600 -4.000 -40 >>>>> >>>>> >>>>> Is this what you are looking for? >>>>> >>>>> Larry >>>>> >>>>> >>>>> >>>>> On Tue, Sep 22, 2015 at 11:57 AM, Tom Breloff <t...@breloff.com> >>>>> wrote: >>>>> >>>>>> Larry: can you provide details on exactly what you like about >>>>>> Fortran's print statement? Did it provide good defaults? Was it easy to >>>>>> customize? >>>>>> >>>>>> On Tue, Sep 22, 2015 at 12:55 PM, LarryD <larryd...@gmail.com> wrote: >>>>>> >>>>>>> Something I miss from Fortran is the very convenient default "print >>>>>>> *, ..... " It handled almost 100% of my needs while working on a >>>>>>> program >>>>>>> and was easily replaced by real formatting when the time came. Is there >>>>>>> any >>>>>>> chance that Julia could get something like this? >>>>>>> >>>>>>> Thanks >>>>>>> >>>>>>> >>>>>>> On Monday, September 21, 2015 at 3:46:31 AM UTC-5, Ferran Mazzanti >>>>>>> wrote: >>>>>>>> >>>>>>>> Dear all, >>>>>>>> >>>>>>>> I could use some help here, because I can't believe I'm not able to >>>>>>>> easily print formatted numbers under Julia in a easy way. What I try >>>>>>>> to do >>>>>>>> is to write a function that, given a vector, prints all its components >>>>>>>> with >>>>>>>> a user-defined format. I was trying something of the form >>>>>>>> >>>>>>>> function Print_Vec(aux_VEC,form_VEC) >>>>>>>> form_VEC :: ASCIIString >>>>>>>> str_VEC = "%16.8f" >>>>>>>> for elem_VEC in aux_VEC >>>>>>>> str_VEC += @sprintf(form_VEC,elem_VEC) >>>>>>>> end >>>>>>>> return str_VEC >>>>>>>> end >>>>>>>> >>>>>>>> However, that doesn't work because it looks like the first argument >>>>>>>> in @sprintf must be a explicit string, and not a variable. >>>>>>>> Is there anything I can do with that? >>>>>>>> >>>>>>>> Thanks a lot for your help. >>>>>>>> >>>>>>> >>>>>> >>>>> >>> >> >