> Hi Mma experts,
>
> Greetings. The other day i saw another posting with basically the same
> question, but haven't seen posted answers yet, so please pardon.
>
> First off, i'm a loyal fan of Mma and WRI, so this is no mean a complain
> (how minor it is), but rather, i'm hoping to hear i've been ignorant ...
>
> The idea is that i don't need to save full-accuracy numbers (often
> reaching 14-15 decimal places), and instead wanted, say, 2-3 decimal places.
> This would cut down the file size by half or so, and even more important,
> it makes much better comprehension of the data save. i'm running things that
> gave 100-200+ printed pages each run, and need to run a lot (100+ of runs).
> Truncated numbers is real helpful, as you can imagine.
>
> i've tried to use NumberForm[ exp, numberLength ], but Print/Write
> into files just doesn't evaluate the NumberForm function, making the
> printed expressions even harder to read. So, i've been waiting to hear
> if someone mentioned this problem/solution.
>
> Thank you for your time and kind help. i'd appreciate it greatly.
>
> Best regards,
> - thang nguyen
What follows is a transcript of a session I created with the method you're
probably using, which fails as you stated, and a method that works.
Mathematica 2.2 for SPARC
Copyright 1988-94 Wolfram Research, Inc.
-- Motif graphics initialized --
In[1]:= OpenWrite["foo"]
Out[1]= OutputStream[foo, 3]
In[2]:= NumberForm[N[Pi], {4, 3}] >> "foo"
In[3]:= Close["foo"]
Out[3]= foo
In[4]:= !!foo
NumberForm[3.141592653589793, {4, 3}]
In[4]:= OpenWrite["foo", FormatType->OutputForm]
Out[4]= OutputStream[foo, 4]
In[5]:= NumberForm[N[Pi], {4, 3}] >> "foo"
In[6]:= Close["foo"]
Out[6]= foo
In[7]:= !!foo
3.142
Note the difference was in how we opened the stream. We set the option
FormatType to OutputForm. FormatType describes what format will be used
when writing to a file being opened by OpenWrite (FormatType can also
be set for OpenAppend and for standalone streams). By default:
In[7]:= Options[OpenWrite]
Out[7]= {PageWidth -> 78, PageHeight -> 22, TotalWidth -> Infinity,
> FormatType -> InputForm, TotalHeight -> Infinity,
> StringConversion :> $StringConversion}
You might wonder, why on earth did those Wolfram people set FormatType
to InputForm, when clearly I want to write what I'm seeing on the screen
as output (i.e. OutputForm)? Well, I believe the motivation here was
that if you write an expression to a stream in InputForm, you can always
read it back into Mathematica using the Get (<<) command. It is guaranteed
to be exactly the same as it was written out (including all digits of
precision preserved, and so on). So, the default chosen by Wolfram is
to not throw away any information.
John Fultz
Wolfram Research, Inc.