Re: Is there a simple way to transform 1.1 to
- To: mathgroup at smc.vnet.net
- Subject: [mg93024] Re: [mg92968] Is there a simple way to transform 1.1 to
- From: Alain Cochard <alain at geophysik.uni-muenchen.de>
- Date: Fri, 24 Oct 2008 02:29:07 -0400 (EDT)
- Reply-to: alain at geophysik.uni-muenchen.de
So Andrzej Kozlowski proposed: In[1]:= rAndrzej[z_] := With[{w = RealDigits[z]},FromDigits[MapAt[# /. {x___, a_ /; a != 0, 0 ...} :> {x, a} &, w, 1]]] Someone else proposed in private: In[2]:= rSH[x_Real] := FromDigits[#1]/10^(Length[#1] - #2) & @@ RealDigits[x] Bill Rowe proposed: In[3]:= rBill[x_] := Module[{r = Rationalize[x, 0], p}, p = Round@Log[10, Denominator[r]]; Round[r 10^p]/10^p] They all performed well on early isolated trials, but more systematic tests show failures: In[4]:= x=1.001;{rAndrzej[x],rSH[x],rBill[x]} 1000999999999999 1000999999999999 1001 Out[4]= {----------------, ----------------, ----} 1000000000000000 1000000000000000 1000 In[5]:= x=1.0000000000000001;{rAndrzej[x],rSH[x],rBill[x]} Out[5]= {1, 1, 1} Then, when getting closer to 1, the first 2 give the expected result, while the 3rd one gives sometimes the expected result, sometimes 1. I found a way to do what I want, but only by starting from a string, i.e., I have to enclose the number between double quotes, which is impractical in general. I could not find a general way to transform a number to a string. Specifically, is there a way to transform the above number 1.0000000000000001 (fifteen zeros), which seems to be the most problematic, to the corresponding string "1.0000000000000001" ? Thanks, Alain