\section{Number Printing}

\label{pgfmath-numberprinting}%

{\emph{An extension by Christian Feuers\"anger}}

\medskip
\noindent
\pgfname\ supports number printing in different styles and rounds to arbitrary precision.

\begin{command}{\pgfmathprintnumber\marg{x}}
  Generates pretty-printed output for the (real) number \meta{x}. The
  input number \meta{x} is parsed using |\pgfmathfloatparsenumber|
  which allows arbitrary precision. 

  Numbers are typeset in math mode using the current set of number
  printing options, see below. Optional arguments can also be provided
  using |\pgfmathprintnumber[|\meta{options}|]|\meta{x}. 
\end{command}

\begin{command}{\pgfmathprintnumberto\marg{x}\marg{macro}}
  Returns the resulting number into \meta{macro}
  instead of typesetting it directly.	 
\end{command}

\begin{key}{/pgf/number format/fixed}
  Configures |\pgfmathprintnumber| to round the number to a fixed
  number of digits after the period, discarding any trailing zeros. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed,precision=2}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-04}\hspace{1em}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{24415.98123}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}

  See section~\ref{sec:number:styles} for how to change the
  appearance. 
\end{key}

\begin{key}{/pgf/number format/fixed zerofill=\marg{boolean}  (default true)}
  Enables or disables zero filling for any number drawn in fixed point
  format. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=2}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-04}\hspace{1em}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{24415.98123}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}
  This key affects numbers drawn with |fixed| or |std| styles (the
  latter only if no scientific format is chosen). 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,std,fixed zerofill,precision=2}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-05}\hspace{1em}
\pgfmathprintnumber{1}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}

  See section~\ref{sec:number:styles} for how to change the
  appearance. 
\end{key}

\begin{key}{/pgf/number format/sci}
  Configures |\pgfmathprintnumber| to display numbers in scientific
  format, that means sign, mantissa and exponent (basis~$10$). The
  mantissa is rounded to the desired |precision| (or |sci precision|,
  see below). 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,precision=2}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-04}\hspace{1em}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{24415.98123}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}

See section~\ref{sec:number:styles} for how to change the exponential
display style. 
\end{key}

\begin{key}{/pgf/number format/sci zerofill=\marg{boolean}  (default true)}
  Enables or disables zero filling for any number drawn in scientific
  format. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,sci zerofill,precision=2}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-04}\hspace{1em}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{24415.98123}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}
  As with |fixed zerofill|, this option does only affect numbers drawn
  in |sci| format (or |std| if the scientific format is chosen). 

  See section~\ref{sec:number:styles} for how to change the
  exponential display style. 
\end{key}

\begin{stylekey}{/pgf/number format/zerofill=\marg{boolean} (default true)}
  Sets both |fixed zerofill| and |sci zerofill| at once.
\end{stylekey}

\begin{keylist}{/pgf/number format/std,%
	/pgf/number format/std=\meta{lower e},
	/pgf/number format/std=\meta{lower e}:\meta{upper e}}
  Configures |\pgfmathprintnumber| to a standard algorithm. It chooses
  either |fixed| or |sci|, depending on the order of magnitude. Let
  $n=s \cdot m \cdot 10^e$ be the input number and $p$ the current
  precision. If $-p/2 \le e \le 4$, the number is displayed using
  |fixed| format. Otherwise, it is displayed using |sci| format. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,std,precision=2}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-04}\hspace{1em}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{24415.98123}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}
  The parameters can be customized using the optional integer
  argument(s): if $\text{\meta{lower e}} \le e \le \text{\meta{upper
      e}}$, the number is displayed in |fixed| format, otherwise in
  |sci| format. Note that \meta{lower e} should be negative for useful
  results. The precision used for the scientific format can be
  adjusted with |sci precision| if necessary. 
\end{keylist}

\begin{keylist}{/pgf/number format/relative*=\meta{exponent base 10}}
  Configures |\pgfmathprintnumber| to format numbers relative to an
  order of magnitude, $10^r$, where $r$ is an integer number. 

  This key addresses different use-cases. 
	
  \paragraph{First use-case:} provide a unified format for a
  \emph{sequence} of numbers. Consider the following test: 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/relative*={1}}
\pgfmathprintnumber{6.42e-16}\hspace{1em}
\pgfmathprintnumber{1.2}\hspace{1em}
\pgfmathprintnumber{6}\hspace{1em}
\pgfmathprintnumber{20.6}\hspace{1em}
\pgfmathprintnumber{87}
\end{codeexample}
  \noindent With any other style, the |6.42e-16| would have been
  formatted as an isolated number. Here, it is rounded to |0| because
  when viewed relative to $10^1$ (the exponent $1$ is the argument for
  |relative|), it has no significant digits. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/relative*={2}}
\pgfmathprintnumber{123.345}\hspace{1em}
\pgfmathprintnumber{0.0012}\hspace{1em}
\pgfmathprintnumber{0.0014}\hspace{1em}
\end{codeexample}
  \noindent The example above applies the initial |precision=2| to
  |123.345| -- relative to $100$. Two significant digits of |123.345|
  relative to $100$ are |123|. Note that the ``$2$ significant digits
  of |123.345|'' translates to ``round |1.2345| to $2$ digits'', which
  would yield |1.2300|. Similarly, the other two numbers are |0|
  compared to $100$ using the given |precision|. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/relative*={-3}}
\pgfmathprintnumber{123.345}\hspace{1em}
\pgfmathprintnumber{0.0012}\hspace{1em}
\pgfmathprintnumber{0.0014}\hspace{1em}
\end{codeexample}

  \paragraph{Second use-case:} improve rounding in the presence of
  \emph{inaccurate} numbers. Let us suppose that some
  limited-precision arithmetics resulted in the result |123456999|
  (like the |fpu| of \pgfname). You know that its precision is about
  five or six significant digits. And you want to provide a fixed
  point output. In this case, the trailing digits |....999| are a
  numerical artifact due to the limited precision. Use
  |relative*=3,precision=0| to eliminate the artifacts: 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,relative*={3},precision=0}
\pgfmathprintnumber{123456999}\hspace{1em}
\pgfmathprintnumber{123456999.12}
\end{codeexample}
  \noindent Here, |precision=0| means that we inspect |123456.999| and
  round that number to $0$ digits. Finally, we move the period back to
  its initial position. Adding |relative style=fixed| results in fixed
  point output format: 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,relative*={3},precision=0,relative style=fixed}
\pgfmathprintnumber{123456999}\hspace{1em}
\pgfmathprintnumber{123456999.12}
\end{codeexample}
  \noindent Note that there is another alternative for this use-case
  which is discussed later: the |fixed relative| style. 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed relative,precision=6}
\pgfmathprintnumber{123456999}\hspace{1em}
\pgfmathprintnumber{123456999.12}
\end{codeexample}
	
  You might wonder why there is an asterisk in the key's name. The
  short answer is: there is also a \declareandlabel{/pgf/number
    format/relative} number printer which does unexpected things. The
  key |relative*| repairs this. Existing code will still use the old
  behavior. 
	
  Technically, the key works as follows: as already explained above,
  |relative*=3| key applied to |123456999.12| moves the period by
  three positions and analyzes |123456.99912|. Mathematically
  speaking, we are given a number $x = \pm m \cdot 10^e$ and we
  attempt to apply |relative*=|$r$. The method then rounds $x / 10^r$
  to |precision| digits. Afterwards, it multiplies the result by
  $10^r$ and typesets it. 
\end{keylist}

\begin{stylekey}{/pgf/number format/every relative}
  A style which configures how the |relative| method finally displays
  its results. 

  The initial configuration is
\begin{codeexample}[code only]
\pgfkeys{/pgf/number format/every relative/.style=std}
\end{codeexample}

  Note that rounding is turned off when the resulting style is being
  evaluated (since |relative| already rounded the number). 

  Although supported, I discourage from using |fixed zerofill| or
  |sci zerofill| in this context -- it may lead to a suggestion of higher
  precision than is actually used (because |fixed zerofill| might
  simply add |.00| although there was a different information before
  |relative| rounded the result). 
\end{stylekey}

\begin{key}{/pgf/number format/relative style=\marg{options}}
  The same as |every relative/.append style=|\marg{options}.
\end{key}

\begin{keylist}{/pgf/number format/fixed relative}
  Configures |\pgfmathprintnumber| to format numbers in a similar way
  to the |fixed| style, but the |precision| is interpreted relatively
  to the number's exponent. 

  The motivation is to get the same rounding effect as for |sci|, but
  to display the number in the |fixed| style: 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed relative,precision=3}
\pgfmathprintnumber{1000.0123}\hspace{1em}
\pgfmathprintnumber{100.0567}\hspace{1em}
\pgfmathprintnumber{0.000010003452}\hspace{1em}
\pgfmathprintnumber{0.010073452}\hspace{1em}
\pgfmathprintnumber{1.23567}\hspace{1em}
\pgfmathprintnumber{1003.75}\hspace{1em}
\pgfmathprintnumber{1006.75}\hspace{1em}
\end{codeexample}
	
  The effect of |fixed relative| is that the number is rounded to
  \emph{exactly} the first \meta{precision} non-zero digits, no matter
  how many leading zeros the number might have. 

  Use |fixed relative| if you want |fixed| and if you know that only
  the first $n$ digits are correct. Use |sci| if you need a scientific
  display style and only the first $n$ digits are correct. 

  Note that |fixed relative| ignores the |fixed zerofill| flag.

  See also the |relative*| key. Note that the
  |relative=|\marg{exponent} key explicitly moves the period to some
  designated position before it attempts to round the
  number. Afterwards, it ``rounds from the right'', i.e.\ it rounds to
  that explicitly chosen digit position. In contrast to that,
  |fixed relative| ``rounds from the left'': it takes the \emph{first}
  non-zero digit, temporarily places the period after this digit, and
  rounds that number. The rounding style |fixed| leaves the period
  where it is, and rounds everything behind that digit. The |sci|
  style is similar to |fixed relative|. 
\end{keylist}


\begin{key}{/pgf/number format/int detect}
  Configures |\pgfmathprintnumber| to detect integers
  automatically. If the input number is an integer, no period is
  displayed at all. If not, the scientific format is chosen. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,int detect,precision=2}
\pgfmathprintnumber{15}\hspace{1em}
\pgfmathprintnumber{20}\hspace{1em}
\pgfmathprintnumber{20.4}\hspace{1em}
\pgfmathprintnumber{0.01}\hspace{1em}
\pgfmathprintnumber{0}
\end{codeexample}
\end{key}

\begin{command}{\pgfmathifisint\marg{number constant}\marg{true code}\marg{false code}}
  A command which does the same check as |int detect|, but it invokes
  \meta{true code} if the \meta{number constant} actually is an
  integer and the \meta{false code} if not. 

  As a side-effect, |\pgfretval| will contain the parsed number,
  either in integer format or as parsed floating point number. 

  The argument \meta{number constant} will be parsed with
  |\pgfmathfloatparsenumber|. 
\begin{codeexample}[]
15 \pgfmathifisint{15}{is an int: \pgfretval.}{is no int}\hspace{1em}
15.5 \pgfmathifisint{15.5}{is an int: \pgfretval.}{is no int}
\end{codeexample}
\end{command}

\begin{key}{/pgf/number format/int trunc}
  Truncates every number to integers (discards any digit after the
  period). 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,int trunc}
\pgfmathprintnumber{4.568}\hspace{1em}
\pgfmathprintnumber{5e-04}\hspace{1em}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{24415.98123}\hspace{1em}
\pgfmathprintnumber{123456.12345}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/frac}
  Displays numbers as fractionals.

\begin{codeexample}[width=3cm]
\pgfkeys{/pgf/number format/frac}
\pgfmathprintnumber{0.333333333333333}\hspace{1em}
\pgfmathprintnumber{0.5}\hspace{1em}
\pgfmathprintnumber{2.133333333333325e-01}\hspace{1em}
\pgfmathprintnumber{0.12}\hspace{1em}
\pgfmathprintnumber{2.666666666666646e-02}\hspace{1em}
\pgfmathprintnumber{-1.333333333333334e-02}\hspace{1em}
\pgfmathprintnumber{7.200000000000000e-01}\hspace{1em}
\pgfmathprintnumber{6.666666666666667e-02}\hspace{1em}
\pgfmathprintnumber{1.333333333333333e-01}\hspace{1em}
\pgfmathprintnumber{-1.333333333333333e-02}\hspace{1em}
\pgfmathprintnumber{3.3333333}\hspace{1em}
\pgfmathprintnumber{1.2345}\hspace{1em}
\pgfmathprintnumber{1}\hspace{1em}
\pgfmathprintnumber{-6}
\end{codeexample}

\begin{key}{/pgf/number format/frac TeX=\marg{\textbackslash macro} (initially \texttt{\textbackslash frac})}
  Allows to use a different implementation for |\frac| inside of the
  |frac| display type. 
\end{key}

\begin{key}{/pgf/number format/frac denom=\meta{int} (initially empty)}
  Allows to provide a custom denominator for |frac|.
\begin{codeexample}[width=3cm]
\pgfkeys{/pgf/number format/.cd,frac, frac denom=10}
\pgfmathprintnumber{0.1}\hspace{1em}
\pgfmathprintnumber{0.5}\hspace{1em}
\pgfmathprintnumber{1.2}\hspace{1em}
\pgfmathprintnumber{-0.6}\hspace{1em}
\pgfmathprintnumber{-1.4}\hspace{1em}
\end{codeexample}
\end{key}
\begin{key}{/pgf/number format/frac whole=\mchoice{true,false} (initially true)}
  Configures whether complete integer parts shall be placed in front
  of the fractional part. In this case, the fractional part will be
  less then $1$. Use |frac whole=false| to avoid whole number parts. 
\begin{codeexample}[width=3cm]
\pgfkeys{/pgf/number format/.cd,frac, frac whole=false}
\pgfmathprintnumber{20.1}\hspace{1em}
\pgfmathprintnumber{5.5}\hspace{1em}
\pgfmathprintnumber{1.2}\hspace{1em}
\pgfmathprintnumber{-5.6}\hspace{1em}
\pgfmathprintnumber{-1.4}\hspace{1em}
\end{codeexample}
\end{key}
\begin{key}{/pgf/number format/frac shift=\marg{integer} (initially 4)}
  In case you experience problems because of stability problems, try
  experimenting with a different |frac shift|. Higher shift values $k$
  yield higher sensitivity to inaccurate data or inaccurate
  arithmetics. 

  Technically, the following happens. If $r < 1$ is the fractional
  part of the mantissa, then a scale $i = 1/r \cdot 10^k$ is computed
  where $k$ is the shift; fractional parts of $i$ are neglected. The
  value $1/r$ is computed internally, its error is amplified. 

  If you still experience stability problems, use |\usepackage{fp}| in
  your preamble. The |frac| style will then automatically employ the
  higher absolute precision of |fp| for the computation of $1/r$. 
\end{key}
\end{key}

\begin{key}{/pgf/number format/precision=\marg{number}}
  Sets the desired rounding precision for any display operation. For
  scientific format, this affects the mantissa. 
\end{key}

\begin{key}{/pgf/number format/sci precision=\meta{number or empty} (initially empty)}
  Sets the desired rounding precision only for |sci| styles.

  Use |sci precision={}| to restore the initial configuration (which
  uses the argument provided to |precision| for all number styles). 
\end{key}

\begin{key}{/pgf/number format/read comma as period=\mchoice{true,false} (initially false)}
	This is one of the few keys which allows to customize the number parser. If this switch is turned on, a comma is read just as a period.
\begin{codeexample}[]
\pgfkeys{/pgf/number format/read comma as period}
\pgfmathprintnumber{1234,56}
\end{codeexample}
	This is typically undesired as it can cause side--effects with math parsing instructions. However, it is supported to format input numbers or input tables. Consider |use comma| to typeset the result with a comma as well.
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	read comma as period,
	use comma}
\pgfmathprintnumber{1234,56}
\end{codeexample}
\end{key}

\subsection{Changing display styles}%
\label{sec:number:styles}%

You can change the way how numbers are displayed. For example, if you
use the `\texttt{fixed}' style, the input number is rounded to the
desired precision and the current fixed point display style is used to
typeset the number. The same is applied to any other format: first,
rounding routines are used to get the correct digits, afterwards a
display style generates proper \TeX-code. 

\begin{key}{/pgf/number format/set decimal separator=\marg{text}}
  Assigns \marg{text} as decimal separator for any fixed point numbers
  (including the mantissa in sci format). 

  Use |\pgfkeysgetvalue{/pgf/number format/set decimal separator}\value| 
  to get the current separator into |\value|. 
\end{key}

\begin{stylekey}{/pgf/number format/dec sep=\marg{text}}
  Just another name for |set decimal separator|.
\end{stylekey}

\begin{key}{/pgf/number format/set thousands separator=\marg{text}}
  Assigns \marg{text} as thousands separator for any fixed point
  numbers (including the mantissa in sci format). 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,
	precision=2,
	set thousands separator={}}
\pgfmathprintnumber{1234.56}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,
	precision=2,
	set thousands separator={}}
\pgfmathprintnumber{1234567890}
\end{codeexample}

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,
	precision=2,
	set thousands separator={.}}
\pgfmathprintnumber{1234567890}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,
	precision=2,
	set thousands separator={,}}
\pgfmathprintnumber{1234567890}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,
	precision=2,
	set thousands separator={{{,}}}}
\pgfmathprintnumber{1234567890}
\end{codeexample}
  The last example employs commas and disables the default
  comma-spacing. 

  Use |\pgfkeysgetvalue{/pgf/number format/set thousands separator}\value| 
  to get the current separator into |\value|. 
\end{key}

\begin{stylekey}{/pgf/number format/1000 sep=\marg{text}}
  Just another name for |set thousands separator|.
\end{stylekey}

\begin{key}{/pgf/number format/1000 sep in fractionals=\marg{boolean} (initially false)}
  Configures whether the fractional part should also be grouped into
  groups of three digits. 

  The value |true| will active the |1000 sep| for both, integer and
  fractional parts. The value |false| will active |1000 sep| only for the integer part.
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	precision=999,
	set thousands separator={\,},
	1000 sep in fractionals,
	}
\pgfmathprintnumber{1234.1234567}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,fixed zerofill,
	precision=9,
	set thousands separator={\,},
	1000 sep in fractionals,
	}
\pgfmathprintnumber{1234.1234567}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/min exponent for 1000 sep=\marg{number} (initially 0)}
  Defines the smallest exponent in scientific notation which is
  required to draw thousand separators. The exponent is the number of
  digits minus one, so $\meta{number}=4$ will use thousand separators
  starting with $1e4 = 10000$. 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	int detect,
	1000 sep={\,},
	min exponent for 1000 sep=0}
\pgfmathprintnumber{5000}; \pgfmathprintnumber{1000000}
\end{codeexample}

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	int detect,
	1000 sep={\,},
	min exponent for 1000 sep=4}
\pgfmathprintnumber{1000}; \pgfmathprintnumber{5000}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	int detect,
	1000 sep={\,},
	min exponent for 1000 sep=4}
\pgfmathprintnumber{10000}; \pgfmathprintnumber{1000000}
\end{codeexample}
  \noindent A value of |0| disables this feature (negative values are
  ignored). 
\end{key}

\begin{key}{/pgf/number format/use period}
  A predefined style which installs periods ``\texttt{.}'' as decimal
  separators and commas ``\texttt{,}'' as thousands separators. This
  style is the default. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed,precision=2,use period}
\pgfmathprintnumber{12.3456}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed,precision=2,use period}
\pgfmathprintnumber{1234.56}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/use comma}
  A predefined style which installs commas ``\texttt{,}'' as decimal
  separators and periods ``\texttt{.}'' as thousands separators. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed,precision=2,use comma}
\pgfmathprintnumber{12.3456}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,fixed,precision=2,use comma}
\pgfmathprintnumber{1234.56}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/skip 0.=\marg{boolean} (initially false)}
  Configures whether numbers like $0.1$ shall be typeset as $.1$ or
  not. 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,precision=2,
	skip 0.}
\pgfmathprintnumber{0.56}
\end{codeexample}
\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,
	fixed,
	fixed zerofill,precision=2,
	skip 0.=false}
\pgfmathprintnumber{0.56}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/showpos=\marg{boolean} (initially false)}
  Enables or disables the display of plus signs for non-negative
  numbers. 
\begin{codeexample}[]
\pgfkeys{/pgf/number format/showpos}
\pgfmathprintnumber{12.345}
\end{codeexample}

\begin{codeexample}[]
\pgfkeys{/pgf/number format/showpos=false}
\pgfmathprintnumber{12.345}
\end{codeexample}

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,showpos,sci}
\pgfmathprintnumber{12.345}
\end{codeexample}
\end{key}

\begin{stylekey}{/pgf/number format/print sign=\marg{boolean}}
  A style which is simply an alias for |showpos=|\marg{boolean}. 
\end{stylekey}

\begin{key}{/pgf/number format/sci 10e}
  Uses $m \cdot 10^e$ for any number displayed in scientific format. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,sci 10e}
\pgfmathprintnumber{12.345}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/sci 10\textasciicircum e}
  The same as `|sci 10e|'.
\end{key}

\begin{key}{/pgf/number format/sci e}
  Uses the `$1e{+}0$' format which is generated by common scientific
  tools for any number displayed in scientific format. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,sci e}
\pgfmathprintnumber{12.345}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/sci E}
  The same with an uppercase `\texttt{E}'.

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,sci E}
\pgfmathprintnumber{12.345}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/sci subscript}
  Typesets the exponent as subscript for any number displayed in
  scientific format. This style requires very little space. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,sci subscript}
\pgfmathprintnumber{12.345}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/sci superscript}
  Typesets the exponent as superscript for any number displayed in
  scientific format. This style requires very little space. 

\begin{codeexample}[]
\pgfkeys{/pgf/number format/.cd,sci,sci superscript}
\pgfmathprintnumber{12.345}
\end{codeexample}
\end{key}

\begin{key}{/pgf/number format/sci generic=\marg{keys}}
  Allows to define an own number style for the scientific
  format. Here, \meta{keys} can be one of the following choices (omit
  the long key prefix): 

\begin{key}{/pgf/number format/sci generic/mantissa sep=\marg{text} (initially empty)}
  Provides the separator between a mantissa and the exponent. It might
  be |\cdot|, for example, 
\end{key}
\begin{key}{/pgf/number format/sci generic/exponent=\marg{text} (initially empty)}
  Provides text to format the exponent. The actual exponent is
  available as argument |#1| (see below). 
\end{key}

\begin{codeexample}[]
\pgfkeys{
	/pgf/number format/.cd,
	sci,
	sci generic={mantissa sep=\times,exponent={10^{#1}}}}
\pgfmathprintnumber{12.345};
\pgfmathprintnumber{0.00012345}
\end{codeexample}
  The \meta{keys} can depend on three parameters, namely on |#1| which
  is the exponent, |#2| containing the flags entity of the floating
  point number and |#3| is the (unprocessed and unformatted)
  mantissa. 

  Note that |sci generic| is \emph{not} suitable to modify the
  appearance of fixed point numbers, nor can it be used to format the
  mantissa (which is typeset like fixed point numbers). Use |dec sep|,
  |1000 sep| and |print sign| to customize the mantissa. 
\end{key}


\begin{key}{/pgf/number format/\protect\atmarktext dec sep mark=\marg{text}}
  Will be placed right before the place where a decimal separator
  belongs to. However, \marg{text} will be inserted even if there is
  no decimal separator. It is intended as place-holder for auxiliary
  routines to find alignment positions. 

  This key should never be used to change the decimal separator!
  Use |dec sep| instead. 
\end{key}

\begin{key}{/pgf/number format/\protect\atmarktext sci exponent mark=\marg{text}}
  Will be placed right before exponents in scientific notation. It is
  intended as place-holder for auxiliary routines to find alignment
  positions. 

  This key should never be used to change the exponent!
\end{key}

\begin{key}{/pgf/number format/assume math mode=\marg{boolean} (default true)}
  Set this to |true| if you don't want any checks for math mode. The
  initial setting checks whether math mode is active using
  |\pgfutilensuremath| for each final number. 
	
  Use |assume math mode=true| if you know that math mode is active. In
  that case, the final number is typeset as-is, no further checking is
  performed. 
\end{key}


\begin{stylekey}{/pgf/number format/verbatim}
  A style which configures the number printer to produce verbatim text
  output, i.\,e., it doesn't contain \TeX\ macros. 
\begin{codeexample}[]
\pgfkeys{
	/pgf/fpu,
	/pgf/number format/.cd,
	sci,
	verbatim}
\pgfmathprintnumber{12.345};
\pgfmathprintnumber{0.00012345};
\pgfmathparse{exp(15)}
\pgfmathprintnumber{\pgfmathresult}
\end{codeexample}
  The style resets |1000 sep|, |dec sep|, |print sign|, |skip 0.| and
  sets |assume math mode|. Furthermore, it installs a |sci generic|
  format for verbatim output of scientific numbers. 

  However, it will still respect |precision|, |fixed zerofill|,
  |sci zerofill| and the overall styles |fixed|, |sci|, |int detect|
  (and their variants). It might be useful if you intend to write
  output files. 
\end{stylekey}
%--------------------------------------------------
% \subsubsection{Defining own display styles}
% You can define own display styles, although this may require some insight into \TeX-programming. Here are two examples:
% \begin{enumerate}
% 	\item A new fixed point display style: The following code defines a new style named `\texttt{my own fixed point style}' which uses $1{\cdot}00$ instead of $1.00$.
% \begin{lstlisting}
% \def\myfixedpointstyleimpl#1.#2\relax{%
% 	#1{\cdot}#2%
% }%
% \def\myfixedpointstyle#1{%
% 	\pgfutilensuremath{%
% 	\ifpgfmathfloatroundhasperiod
% 		\expandafter\myfixedpointstyleimpl#1\relax
% 	\else
% 		#1%
% 	\fi
% 	}%
% }
% \pgfkeys{/my own fixed point style/.code={%
% 	\let\pgfmathprintnumber@fixed@style=\myfixedpointstyle}
% }%
% \end{lstlisting}
% 	You only need to overwrite the macro \lstinline!\pgfmathprintnumber@fixed@style!. This macro takes one argument (the result of any numerical computations). The \TeX-boolean \lstinline!\ifpgfmathfloatroundhasperiod! is true if and only if the input number contains a period.
%
% 	\item An example for a new scientific display style:
% \begin{lstlisting}
% % #1:
% % 		0 == '0' (the number is +- 0.0),
% % 		1 == '+',
% % 		2 == '-',
% % 		3 == 'not a number'
% % 		4 == '+ infinity'
% % 		5 == '- infinity'
% % #2: the mantissa
% % #3: the exponent
% \def\myscistyle#1#2e#3\relax{%
% 	...
% }
% \pgfkeys{/my own sci style/.code={%
% 	\let\pgfmathfloatrounddisplaystyle=\myscistyle},
% }%
% \end{lstlisting}
% \end{enumerate}
%--------------------------------------------------
