Re: How can I transform the number of 123.456 into "123.456"?
- To: mathgroup at smc.vnet.net
- Subject: [mg26585] Re: [mg26515] How can I transform the number of 123.456 into "123.456"?
- From: Erich Mueller <emuelle1 at uiuc.edu>
- Date: Tue, 9 Jan 2001 01:51:59 -0500 (EST)
- Organization: University of Illinois at Urbana-Champaign
- References: <200101010732.CAA09656@smc.vnet.net> <92uqmk$drv@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
A much simpler solution to getting more significant figures in your string: ToString[InputForm[345.89087]] Other formats can be used for more sophisticated outputs. Erich On 3 Jan 2001, Tomas Garza wrote: > I see your problem. If you have a real number, a simple ToString[] will not > work the way you want, since there will be a roundoff at the end: > > In[1]:= > ToString[345.89087] > Out[1]= > "345.891" > > Then I suggest the following approach. Take first > > In[2]:= > a = RealDigits[345.89087] > Out[2]= > {{3, 4, 5, 8, 9, 0, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 3} > > Notice that the last element gives the number of digits that are to the left > of the decimal point, 3 in this example. Then search for the significant > digits, i.e. get rid of the sequence of zeros (if any) at the end. Define a > function zeroAtTheEnd: > > In[3]:= > zeroAtTheEnd[y_] := y /. {x__, 0} -> {x} > > which gets rid of the ending zero, if any. Nest this function until the > result no longer changes, i.e., there is no zero at the end. To do this, we > use FixedPoint[]: > > In[4]:= > b = FixedPoint[zeroAtTheEnd, a[[1]]] > Out[4]= > {3, 4, 5, 8, 9, 0, 8, 7} > > Finally, > > In[5]:= > ToString[FromDigits[Take[b, a[[2]]]]] <> "." <> > ToString[FromDigits[Take[b, -Length[b] + a[[2]]]]] > Out[5]= > "345.89087" > > **However**, this approach will not work always, since Mathematica has an > odd way to handle approximate numbers. For example, > > In[6]:= > RealDigits[345.89087] > Out[6]= > {{3, 4, 5, 8, 9, 0, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0}, 3} > > but > > In[7]:= > RealDigits[89087.345] > Out[7]= > {{8, 9, 0, 8, 7, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 1}, 5} > > and now you get an unexpected (and undesirable) 1 at the end of the sequence > of digits! It seems that a general approach would have to be of a less > elegant nature, viz, if you have an integer number, then just use > ToString[]; otherwise, multiply the number by 10 to the power "number of > figures to the right of the decimal point", i..e. make it an integer first, > and then proceed as indicated above, but you must count visually the number > of significant figures in your number. Example: > > In[8]:= > c = FixedPoint[zeroAtTheEnd, RealDigits[89087.345*10^3][[1]]] > Out[8]= > {8, 9, 0, 8, 7, 3, 4, 5} > > In[9]:= > ToString[FromDigits[Take[c, 5]]] <> "." <> ToString[FromDigits[Take[c, -3]]] > Out[9]= > "89087.345" > > There is probably a much simpler way to do what you want, but this is what > came to my mind first. > > Tomas Garza > Mexico City > > > > > > > > > ----- Original Message ----- > From: "liwen liwen" <gzgear at yahoo.com> To: mathgroup at smc.vnet.net > Subject: [mg26585] [mg26515] How can I transform the number of 123.456 into "123.456"? > > > > Dear friend: > > Happy New Year! > > I want to transform the numbers such as 123.456 or > > 345.89087 into strings as "123.456" or "345.89087" , > > Could you help me? > > Thank you very much! > > > > Best regards, > > > > Liwen > > E-mail: gzgear at yahoo.com > > > > 12/30/2000 > > > > > > > > __________________________________________________ > > Do You Yahoo!? > > Yahoo! Photos - Share your holiday photos online! > > http://photos.yahoo.com/ > > > >
- References:
- How can I transform the number of 123.456 into "123.456"?
- From: liwen liwen <gzgear@yahoo.com>
- How can I transform the number of 123.456 into "123.456"?