# getting rid of "e" in x,y,z coordinates.

 01 January 2004 artistx Frequenter portfolio brent brent wiley 3D CG Artist getting rid of "e" in x,y,z coordinates. getting rid of "e" in x,y,z coordinates Wondering if someone could help me out with a Format problem. I'm printing out points to a file, but I don't want the exponential printed out. I've notice this occuring with very small numbers in Max. For example, [-86.6734,6.41911e-007,16.7711] where the y component in the list has an exponent. I was hoping there was some easy command to get rid of this exponent and force the number to print out in decimal form, but I haven't found anything. I was wondering if someone could point me in the right direction. Am I missing something big here? I'm currently using a simple loop to decide if the number is smaller than a certain amount (let's say .00001 for example) if the number is smaller than that, then print out "0" in place of the exponential number. if MyPoint.y < .00001 do ( MyPoint.y = 0 print MyPoint.y ) Surely, there must be an easier way than this. Or is everyone else using a loop to convert their exponential numbers. Anyone know of a way to completely convert without losing any precision in the exponential number given different exponential values. Say a function that takes [7.24311e-008, 6.41911e-007, 12] and converts to [0.000000724311, 0.00000641911, 12]. Any help would be greatly appreciated. Thanks. share quote
 01 January 2004 LFShade smarter than I look   for sale or rent! I don't think you'll be able to work with those as numbers (without the exponential notation), but since you're just going out to a file anyway you might try working with them as strings. It should be reasonably simple to write a function that converts, for instance, 7.24311e-008 to "0.0000000724311" as a string. Of course, if you're going to be reading these values back into Max it will convert them to 0.0, so don't go to the extra trouble unless you're exporting for use elsewhere. RH __________________ Got Maxscript? RHTools share quote
 02 February 2004 artistx Frequenter portfolio brent brent wiley 3D CG Artist Hello LFShade, thanks for the reply. It was quite helpful. I know how to build a function that could convert 7.24311e-008 to "0.0000000724311" or any number that has an e-008 on the end of it. I'm not sure where to start when it comes to multiple different exponent numbers. Lets say you get the point set [7.243411e-008, 6.589346e-007, 3.142323]. Is there a blanket function that could address e-008 and e-007(and any other number with e^-nth power). Is there an "exponent-to- decimal" converter out there. Any rough ideas on where to start LFShade? share quote
 02 February 2004 RealThing Frequenter portfolio David Miller Dome Gnome Nashua, USA Here's a function but it's a bit messy (just got home from the bar). I can't promise that it will work in all cases so make sure you test this a bit. If you make any changes or bug fixes please post them. I'm sure this can be simplified a bit more than this as well. to use just call either point3string or floatstring `````` fn floatstring num = ( if num < 0.0001 or num > 999999.0 then ( numstr = num as string count = numstr.count -- grab mantissa mantissa = substring numstr 1 (count - 5) -- grab sign from exponent append it to "1" and multiply by exponent if (substring numstr (count - 3) 1) == "-" then ( exponent = (-1 * ((substring numstr (count - 2) 3) as integer)) ) else ( exponent = ((substring numstr (count - 2) 3) as integer) ) -- adjust decimal place strout = "" if mantissa[1] == "-" do ( -- check to see if mantissa is negative strout += "-" mantissa = (substring mantissa 2 (mantissa.count - 1)) ) -- locate decimal place decimal = findstring mantissa "." mantissa = (replace mantissa decimal 1 "") if exponent < 0 then ( strout += "0." for x in 0 to (abs(exponent) - decimal) do ( strout += "0" ) strout += mantissa ) else ( -- account for decimal places moved by removing decimal from string mantcount = mantissa.count - (decimal - 1) strout += (replace mantissa 2 1 "") for x in 0 to (abs(exponent) - mantcount ) do ( strout += "0" ) strout += ".0" ) return strout ) else return num ) fn point3string pt3 ( return ("[ "+(floatstring pt3.x) + " , " + (floatstring pt3.y) " , " (floatstring pt3.z) + " ] ") )`````` __________________ -Dave share quote
 02 February 2004 artistx Frequenter portfolio brent brent wiley 3D CG Artist RealThing thank you for putting up that very helpful code. If you wrote that up in a drunken stupor, you must be extremely productive when you're sober! The code looks workable to me. I get the gist of what you're saying. You addressed some things I hadn't considered, such as creating a case where the decimal"." is eleminated if necessary and using substring to help filter through the string count. Thanks again. Your help is greatly appreciate. It's good to have people like RealThing and LFShade on the forums. share quote
 02 February 2004 Kramsurfer Don't Know-it-All.   portfolio Keith R Morrison Custom Tools Developer Focus360 San Diego, USA Here's a more string based approch... Only evaluated when max is going to put that "e-" in your giddy-up... not tested THAT much, but seems to work well in one of my scripts... fn ValuetoString Val = ( ValasStr= (Val as string) if ( findstring ValasStr "e-" != undefined ) then ( Reform = filterString ValasStr "e-." ValasStr = "0." for i=1 to ((Reform[3] as integer)-1) do ( ValasStr = ValasStr + "0" ) ValasStr=ValasStr + ( Reform[1] + Reform [2] ) ) ValasStr ) enjoy Keith Morrison www.focus360.com Last edited by Kramsurfer : 02 February 2004 at 06:26 PM. share quote
 02 February 2004 RealThing Frequenter portfolio David Miller Dome Gnome Nashua, USA Looks good Keith. I would put a numeric test before converting all numbers to strings as this is a very slow process and should be avoided when possible. __________________ -Dave share quote
 02 February 2004 RealThing Frequenter portfolio David Miller Dome Gnome Nashua, USA Actually now that I think about it in this case you have to convert the number to a string anyhow. So your method wouldn't be slow. __________________ -Dave share quote
 02 February 2004 Kramsurfer Don't Know-it-All.   portfolio Keith R Morrison Custom Tools Developer Focus360 San Diego, USA yeah... true... That's what I was thinking... ha ha Keith share quote
 02 February 2004 artistx Frequenter portfolio brent brent wiley 3D CG Artist Hello KramSurfer. Thank you for sharing your code. I just glanced it over, but it looks just as valid. Lol, it's funny how people space their code though. I smush my stuff together like KramSurfer. RealThing's code is spacious. I guess it's easier to read it that way though... It's interesting to see where key decisions are made in the two programs. RealThing creates a range bracket for numbers and then makes decisions. KramSurfer converts the numbers to text and then looks for the "e-". I love seeing the variety of approaches. share quote
 02 February 2004 Kramsurfer Don't Know-it-All.   portfolio Keith R Morrison Custom Tools Developer Focus360 San Diego, USA I actually spaced my code out to make it easier to read in the message. I'm a fan of ";"'s and multi statment lines in ()'s for then and do loops. I like my whole script, with 400+ commands, to fit on the screen at one time.. ha ha... Keith share quote
 01 January 2006 CGTalk Moderation Expert Thread automatically closed This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum. __________________ CGTalk Policy/Legalities Note that as CGTalk Members, you agree to the terms and conditions of using this website. share quote

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts vB code is On Smilies are On [IMG] code is On HTML code is Off CGSociety Society of Digital Artists www.cgsociety.org Powered by vBulletinCopyright ©2000 - 2006, Jelsoft Enterprises Ltd.