MathGroup Archive 2008

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

Search the Archive

NumberSigns and Number Formatting

I would like to write numbers in a dynamic display such that as the numbers 
are varied the width and positioning of the digits, fill spaces, and signs 
remained fixed. Now I know that I can do this if I pick a monspace font such 
as Courier. However, I would like to do this within Panels and in general 
with proportional fonts. The font that is used within Panels is given by 
evaluating CurrentValue["PanelFontFamily"] and gives "Segoe UI". It's a nice 
looking font and I'm happy with it. I don't want a different font for text 
and numbers in a display.

I assume that with proportional fonts the widths of all the digit characters 
are the same. The problem is that the space character is much thinner than 
the digits, and + and - are also different widths than the digits. I found 
that for NumberPadding on the left I could sometimes use \[LetterSpace] to 
match the width of the digits, but I don't think this works for all fonts or 
font sizes. Also it leaves a slight trace of its presence, which would be 
nice to eliminate.

Here is a test case to experiment with:

 {x = 0., numformat},
 numformat[x_] :=
  NumberForm[N[x], {6, 3}, NumberPadding -> {"\[LetterSpace]", "0"},
   NumberSigns -> {"-", "\[LetterSpace]"}, SignPadding -> False];
   {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}]

For a FontSize of 16 the LetterSpace works well for the NumberPadding but it 
does not work well enough for the NumberSigns. If the FontSize is changed to 
12 then it doesn't work for either. If you vary the slider you will see a 
fair amount of jumping around.

The basic problem here is that NumberPadding and NumberSigns take only 
single character strings. The ideal solution would be if one could use:

NumberPadding -> {Invisible["0"], "0"}
NumberSigns -> {"-", Invisible["-"]}

but that is not possible.

Unless someone can suggest a reasonable solution to this maybe it's time 
that WRI considered updating NumberFormat.

David Park
djmpark at

  • Prev by Date: Re: How to print TraditionalForm without evaluation
  • Next by Date: Re: Overlapping binning of differences of two lists
  • Previous by thread: Re: Can Mathematica NIntegrate a Log-type singularity?
  • Next by thread: Re: NumberSigns and Number Formatting