Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado
Re: Excluding Decimal Places in the Values of a Variable
Lisa08 writes: > > Hi everyone, > > I have a question that I think should be very simple to answer but I can't seem to find a solution for it. > > I am trying to chop off the last two decimal places for the values of a variable. The values for my variable have 5 decimal places and I want to trim it down to 3. For example, let's say my variable is: > > x=[[1.35679, 2.65487], [3.65789, 4.56455]] > > So I want to exclude the last two decimal places and have it be: > > x=[[1.356, 2.654], [3.657, 4.564]] > > > Now, I know how to do this using a "PRINT" command as below but I don't know how to tell IDL to save the output that was printed out to a variable. > > > IDL> print, x, FORMAT='(F8.3)' > 1.357 > 2.655 > 3.658 > > Also, Is there a way to make it "not round up"? I have found a routine that does what I want, excludes the final two decimal places and doesn't round up, but the problem with it is that it converts the values to a string to do this and then I can't seem to convert them back to floats as it gives me the following error: > > Type Conversion error: Unable to convert given STRING to Float > > The routine I found online to do this is called DECIMALS.pro and is available here: > > https://people.ok.ubc.ca/erosolo/idl/lib/decimals.pro I would do it this way: IDL> x=[[1.35679, 2.65487], [3.65789, 4.56455]] IDL> x = Fix(x*1000)/1000. Cheers, David -- David Fanning, Ph.D. Fanning Software Consulting, Inc. Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ Sepore ma de ni thue. ("Perhaps thou speakest truth.")
On Thursday, February 14, 2013 2:55:56 PM UTC-6, David Fanning wrote: > Lisa08 writes: > > > >> > >> Hi everyone, > >> > >> I have a question that I think should be very simple to answer but I can't seem to find a solution for it. > >> > >> I am trying to chop off the last two decimal places for the values of a variable. The values for my variable have 5 decimal places and I want to trim it down to 3. For example, let's say my variable is: > >> > >> x=[[1.35679, 2.65487], [3.65789, 4.56455]] > >> > >> So I want to exclude the last two decimal places and have it be: > >> > >> x=[[1.356, 2.654], [3.657, 4.564]] > >> > >> > >> Now, I know how to do this using a "PRINT" command as below but I don't know how to tell IDL to save the output that was printed out to a variable. > >> > >> > >> IDL> print, x, FORMAT='(F8.3)' > >> 1.357 > >> 2.655 > >> 3.658 > >> > >> Also, Is there a way to make it "not round up"? I have found a routine that does what I want, excludes the final two decimal places and doesn't round up, but the problem with it is that it converts the values to a string to do this and then I can't seem to convert them back to floats as it gives me the following error: > >> > >> Type Conversion error: Unable to convert given STRING to Float > >> > >> The routine I found online to do this is called DECIMALS.pro and is available here: > >> > >> https://people.ok.ubc.ca/erosolo/idl/lib/decimals.pro > > > > I would do it this way: > > > > IDL> x=[[1.35679, 2.65487], [3.65789, 4.56455]] > > IDL> x = Fix(x*1000)/1000. > > > > Cheers, > > > > David > > > > -- > > David Fanning, Ph.D. > > Fanning Software Consulting, Inc. > > Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ > > Sepore ma de ni thue. ("Perhaps thou speakest truth.") Wow, so simple and easy. I always make things more complicated than they have to be. Thanks so much! Lisa
Lisa08 writes: > Wow, so simple and easy. I always make things more complicated than they have to be. Thanks so much! Oh, sorry. When you said "I have a question that I think should be very simple to answer" I thought you were looking for the simple solution. I'll give you the more complicated on next time. ;-) Cheers, David -- David Fanning, Ph.D. Fanning Software Consulting, Inc. Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ Sepore ma de ni thue. ("Perhaps thou speakest truth.")
Another simple question: why fix() and not floor()? it seems like the difference is a return type of INT vs LONG. anything else? Gianguido On Thursday, February 14, 2013 2:55:56 PM UTC-6, David Fanning wrote: > > > I would do it this way: > > > > IDL> x=[[1.35679, 2.65487], [3.65789, 4.56455]] > > IDL> x = Fix(x*1000)/1000. > > > > Cheers, > > > > David > > > > -- > > David Fanning, Ph.D. > > Fanning Software Consulting, Inc. > > Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ > > Sepore ma de ni thue. ("Perhaps thou speakest truth.")
Gianguido Cianci writes: > Another simple question: why fix() and not floor()? it seems like the difference is a return type of INT vs LONG. anything else? I was wondering that myself. My rule on "simple solutions" is to go with the first one that enters my head. ;-) Cheers, David -- David Fanning, Ph.D. Fanning Software Consulting, Inc. Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ Sepore ma de ni thue. ("Perhaps thou speakest truth.")