Re: Printing numbers

• To: mathgroup at smc.vnet.net
• Subject: [mg54515] Re: [mg54483] Printing numbers
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Tue, 22 Feb 2005 04:23:19 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```ToString[123.456789] //FullForm

"123.457"

It converted the DisplayForm

StringLength[%]

7

ToString[1234567.89] //FullForm

"          6\n1.23457 10"

Again, it converted the DisplayForm

StringLength[%]

22

numberToString[x_?NumberQ] := Module[
{r=Rationalize[x,0],f},
f=RealDigits[FractionalPart[r]];
StringJoin[ToString[IntegerPart[r]] ,".",
Table["0",{-f[[2]]}],ToString/@f[[1]]]];

numberToString[123.456789]//StringLength

10

numberToString[1234567.89]//StringLength

10

numberToString[1234567.00089]//StringLength

13

In the Help Browser, look up NumberForm and PaddedForm

Bob Hanlon

>
> From: Steve Gray <stevebg at adelphia.net>
To: mathgroup at smc.vnet.net
> Date: 2005/02/21 Mon AM 03:44:51 EST
> To: mathgroup at smc.vnet.net
> Subject: [mg54515] [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
> 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.