Re: Printing numbers

*To*: mathgroup at smc.vnet.net*Subject*: [mg54511] Re: [mg54483] Printing numbers*From*: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>*Date*: Tue, 22 Feb 2005 04:23:11 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

>-----Original Message----- >From: Steve Gray [mailto:stevebg at adelphia.net] To: mathgroup at smc.vnet.net >Sent: Monday, February 21, 2005 9:45 AM >To: mathgroup at smc.vnet.net >Subject: [mg54511] [mg54483] Printing numbers > >1. Can anyone tell me why these results are what they are? >Neither answer is what I would expect, which is 10. The two >strings are the same length. > >Print[StringLength[ToString[123.456789]], " ", > StringLength[ToString[1234567.89]]]; >7 22 > >2. Is there a simple, easily available or self-evident way to >get numbers printed out such that the total number of spaces >occupied by the print before the decimal point is some fixed, >user-specified amount, the number of spaces occupied after the >decimal point is a different user-specified amount, and the >number of spaces following the number is a third >user-specified amount. The goal is to easily produce aligned >columns of numerical printing, which would seem to be the most >trivial task in neat number printing. > For example if the function is called fprint, >fprint[345.678,4,5,6] would print 4 spaces followed by 5 >character positions to the left of the point (00345 or (2 >spaces)" 345", specified by another argument), and 6 to its >right. So fprint[345.678,4,5,6] would print (4 spaces)(2 >spaces)"345.678"(3 spaces), or if desired (4 spaces)(2 >spaces)"345.678000"(no spaces), the total taking up 16 >positions. Also fprint[-345.678,4,5,6] would print (4 >spaces)(1 space)"-345.678"(3 spaces), also taking 16 >positions, with the decimal points aligned with the first example. > Help is not that helpful, implying that I have to write >one or find it somewhere. As I recall, C provides an easy way >to do this by setting arguments to Print. > Leads would be appreciated. > >Steve Gray > > > Steve, 1. observe: In[25]:= ToString /@ {123.456789, 1234567.89} // FullForm Out[25]//FullForm= List["123.457", " 6\n1.23457 10"] If you count, you'll find 7 and 22 ("\n" counts as one!) 2. For comparison with fprint check: Print[">>", " ", AccountingForm[345.678, {11, 6}, NumberPadding -> {"0", " "}, NumberSigns -> {"-", " "}, SignPadding -> True], "<<"] Print[">>", " ", AccountingForm[-345.678, {11, 6}, NumberPadding -> {" ", "0"}, NumberSigns -> {"-", " "}, SignPadding -> False], "<<"] Print[" ", PaddedForm[#, {20, 10}, NumberPadding -> {":", "."}, NumberSigns -> {"-", ""}, SignPadding -> True, ExponentFunction -> (Null &)]] & /@ {-123.456789, 1234567.89}; Also look up NumberForm, PaddedForm, etc. and their options. -- Hartmut Wolf