MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to write formatted number into a file

  • To: mathgroup at smc.vnet.net
  • Subject: [mg66611] Re: [mg66607] How to write formatted number into a file
  • From: Christopher Purcell <christopherpurcell at mac.com>
  • Date: Wed, 24 May 2006 03:01:45 -0400 (EDT)
  • References: <200605222215.SAA09809@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Sorry for the long winded post. Like you, I am not happy with the  
built in "Forms" to build Fortran compatible numbers for writing to  
text files, so here is a homemade E-format which may be a starting  
point for your problem. It likely does more than you need, but you  
get what you pay for.

Eformat::usage="Eformat[x,{total,ndigits}] returns Fortran
E Format representation of the number x. Numbers whose exponents are
  greater than 99 are treated as errors. Note that zero is detected  
by comparison with $MachineEpsilon and printed as 0.0000.. without  
the exponent.";

Eformat::notallowed="This function will not accept `1`
as input, it only works on Integer or Real numbers";

Eformat::toomany="Too many digits to right of decimal Point
requested.";

Eformat[0,{tot_Integer,ndigits_Integer}]:=
Eformat[0.,{tot,ndigits}];

Eformat[x_Rational,{tot_Integer,ndigits_Integer}]:=
Eformat[N[x],{tot,ndigits}];

Eformat[x_Integer,{tot_Integer,ndigits_Integer}]:=
Eformat[N[x],{tot,ndigits}];

Eformat[x_Real,{tot_Integer,ndigits_Integer}]:=
Module[{exp,man,junk},(
If[(tot-ndigits)>=7,(
If[Abs[x]<$MachineEpsilon,(
  SequenceForm[" ",PaddedForm[0.,{tot,ndigits+4},NumberPadding-> 
{"","0"}]]),
(junk=MantissaExponent[x,10];
{man,exp}={PaddedForm[junk[[1]]*10.,{tot,ndigits},NumberPadding-> 
{"","0"}],junk[[2]]-1};
If[Abs[exp]<=99,(
If[Abs[exp]<10,(
SequenceForm[If[Sign[x]==-1,""," "],man,"E",
If[exp>=0,"+","-"],
PaddedForm[Abs[exp],1,
NumberPadding->{"0",""}]]),(
SequenceForm[If[Sign[x]==-1,""," "],man,"E",
If[exp>=0,"+","-"],
PaddedForm[Abs[exp],1,
NumberPadding->{"",""}]])]),
SequenceForm[If[Sign[x]==-1,""," "],man,"E","***"]]
)]),Message[Eformat::toomany]])];

Eformat[x_,{tot_Integer,ndigits_Integer}]:=
Eformat[N[x],{tot,ndigits}];
(********************************************************************)
(* Here is a typical usage: *)

Eformat[-Pi*10^21,{10,3}]

-3.142E+21

(* To use this to write a file you could do this: *)

data=Map[Eformat[#,{12,5}]&,Table[n Pi,{n,1,5}]];  (* invent some  
data *)

out=OpenWrite["junk.txt"];                                     (*  
write it to a text file *)
Scan[WriteString[out,#,"\n"]&,data];
Close[out];

(* now look at the file *)

!!junk.txt

3.14159E+00
6.28319E+00
9.42478E+00
1.25664E+01
1.57080E+01

Hope this is what you were seeking.

christopherpurcell at mac.com


On May 22, 2006, at 7:15 PM, phd related wrote:

> Hi, I am try to write a formated number into a file. For example,  
> Writing
> 6.661999999999944*10^-6 as 6.66200E-06 .
> If I use ScientificForm and can see the format 6.66200E-06 in  
> mathematica,
> however when i am trying to write it into a file like the what i  
> see in
> mathematica,
> the I see ScientificForm instead of the result i desired.
> How to tackle this problem?
>


  • Prev by Date: Re: Re: Simplification and Arg[]
  • Next by Date: How to make results from Integrate and NIntegrate agree
  • Previous by thread: How to write formatted number into a file
  • Next by thread: Re: How to write formatted number into a file