MathGroup Archive 2008

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

Search the Archive

Re: NumberSigns and Number Formatting


> I believe that NumberForm was originally designed for monospace fonts. This 
> was generally good enough. The Help for NumberForm says that it controls how 
> the number 'prints' and not that it's purpose is to convert the number to a 
> string. 

Sorry, I didn't even look up the help for NumberForm, which obviously
was a mistake: Of course saying it is for converting to string strictly
speaking was nonsense, since it actually doesn't even do that. What I
probably should have said is that I think its purpose is to create a
sequence of characters to be shown.

> In any case, now that we have much easier dynamics, and constructs 
> like Panel with its proportional font (which I like), there will be much 
> more formatting of numbers within lines of text. NumberForm no longer works 
> properly for this purpose. 


> We can end up getting a lot of 'jitter'. If 
> somehow we could pad with blank characters that had the same widths as "-" 
> and "0" in the font then that would be the simplest solution. 

Hm, I'm not an expert for proportional fonts, but naive as I am I would
believe this probably isn't possible in general, are there any
(technical) rules that for a proportial font all digits have to be the
same size (and height)? Is a blank character with the correct size
something that WRI can provide for any font that you can install and use
within a mathematica document? I don't know. If not, even without
padding a jitter wouldn't be to avoid...

> If that solution could be implemented within NumberForm (and maybe it is impossible) 
> the average user would find it relatively easy to use. The solution you give 
> is slightly heavy lifting for most users. Just because a solution is 
> possible doesn't mean that it will be readily available to most users. They 
> are going to spend a lot of time looking at NumberPadding and NumberSigns 
> because that is the obvious indicated path.

That's correct, it could be made easier and be explained better in the
documentation. If there would be a NumberFormPane as the one you suggest
and that would be mentioned in the "See Also" section that would be
probably the best solution. I think for WRI it pobably would even be
possible to automatically determine the correct Pane-Size with more
internal knowledge about the font-properties, so that the Pane-Size
would only need to change when the font would be changed, but not when
only the content changes. But I'm not sure and unfortunatly I can't
provide that :-). Actually it would be interesting to know if and how
other systems / programming languages / GUI toolkits handle this.

Finally I have another workaround, more along the lines you originally
suggested that should work for most cases. It just makes strings from
NumberForm, and then replaces the string with a row where invisible
padding characters are written using Style[_,Opacity[0]]:

Module[{x = 0., numformat}, numformat[x_] := Row[
   List @@
      NumberForm[N[x], {6, 3}, NumberPadding -> {"@", "0"},
       NumberSigns -> {"-", "$"}, SignPadding -> False]], {
      "@" -> Style["0", Opacity[0]], "$" -> Style["-", Opacity[0]]
 Panel[Column[{Row[{-15 <= "x" <= 15, Spacer[5],
      Slider[Dynamic[x], {-15, 15, .001}], Spacer[5],
      InputField[Dynamic[x], FieldSize -> {5, 1.2}]}],
    Row[{"x:", Spacer[5], Dynamic@numformat[x], Spacer[5],
      "in value."}]}], Style["Number Formatting Problem", 16],
  BaseStyle -> {FontSize -> 16}]]



  • Prev by Date: Re: Getting rid of those deprecated Do[] loops?
  • Next by Date: Re: Exclude O[] from Series[] for Solve[] in Mathematica
  • Previous by thread: Re: NumberSigns and Number Formatting
  • Next by thread: Math Formulas