Re: Printing numbers
- To: mathgroup at smc.vnet.net
- Subject: [mg54576] Re: Printing numbers
- From: dh <dh at metrohm.ch>
- Date: Wed, 23 Feb 2005 03:11:48 -0500 (EST)
- References: <cvc887$qsa$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Steve,
Steve Gray wrote:
> 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
>
By default, ToString formats according to the OutputForm in effect. You
can simply check this by looking at the result of ToString[..]. This gives
123.457 and " 6\n1.23457 10"
The first is truncated because Mathematica by default prints 6 digits.
The second is actually a 2 dimensional output, what explains its length.
To get what you want, you could use InputForm or NumberForm, each has
its little pitfalls.
> 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.
Closest to what you want seems NumberForm. To occupy empty places you
need the option "NumberPadding". e.g.:
NumberForm[3.1234567, {20, 10}, NumberPadding -> {"-", "-"}] gives:
----------3.1234567---
Note a quirck, the number of digits is always too big by one.