diff options
Diffstat (limited to 'graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex')
-rw-r--r-- | graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex index 5378eea470..1220d5c229 100644 --- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex +++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex @@ -2,10 +2,13 @@ % subfile of pgf-PeriodicTable package ---------------------------------------------------------- % -------------------------------------------------------------------------------------------------- % «format a number to a specific number of decimal places, performing rounding» ---------- +% «left shift the dot in a number adding zeros if necessary» ----------------------------------- % -------------------------------------------------------------------------------------------------- \def\pgfPT@dot{.}% \def\pgfPT@nove{9}% +\def\pgfPT@zero{0}% \def\pgfPT@minus{-}% +\def\pgfPT@na{---}% \def\pgfPT@has@minus#1{\expandafter\pgfPT@test@has@minus#1\relax}% \def\pgfPT@test@has@minus#1#2\relax{% \edef\pgfPT@test{#1}\ifx\pgfPT@test\pgfPT@minus\relax% @@ -116,4 +119,91 @@ \edef\pgfPT@digits@toround{#2}\expandafter\pgfPT@str@gobbleN#2\relax% \fi% }% +% -------------------------------------------------------------------------------------------------- +% \pgfPT@shiftdot[number of places to the left]{number} +% usage: +% \pgfPT@shiftdot[3]{15.46} will output 0.01546 +% \pgfPT@shiftdot[3]{1546} will output 1.546 +% -------------------------------------------------------------------------------------------------- +\def\pgfPT@shiftdot[#1]#2{\ignorespaces% +\edef\pgfPT@test{#2}% +\ifx\pgfPT@test\pgfPT@na\relax\edef\pgfPT@test{}\fi% +\ifx\pgfPT@test\pgfPT@relax\relax% +\edef\pgfPT@shiftval{#2}% +\else% +\edef\pgfPT@displace{#1}% +\expandafter\@pgfPT@shiftdot#2.\relax% +\fi% +}% +\def\@pgfPT@shiftdot#1.#2\relax{\ignorespaces% +\edef\pgfPT@digits@toround{#1}% +\edef\pgfPT@afterdot{#2}% +\ifx\pgfPT@afterdot\@empty\relax\else\expandafter\pgfPT@rem@vefinaldot\pgfPT@afterdot\relax\fi% +\pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@digits@toround\relax% +\pgfPT@countf=0\relax% +\pgfPT@temptrue\expandafter\pgfPT@movedot\pgfPT@digits@toround\relax% +\ifx\pgfPT@testb\pgfPT@relax\relax% + \pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@predot\relax% + \edef\pgfPT@shiftval{0.\pgfPT@digits@toround\pgfPT@afterdot}% +\else\ifx\pgfPT@testb\pgfPT@zero\relax% + \pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@predot\relax% + \let\pgfPT@predot\pgfPT@digits@toround% + \edef\pgfPT@shiftval{\pgfPT@testc.\pgfPT@predot\pgfPT@afterdot}% +\else% + \edef\pgfPT@testb@semzeros{}% + \pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@predot\relax% + \let\pgfPT@predot\pgfPT@digits@toround% + \pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@postdot\relax% + \let\pgfPT@postdot\pgfPT@digits@toround% + \expandafter\pgfPT@strlen\pgfPT@postdot\relax% + \pgfPT@counte=0% + \global\advance\pgfPT@countf by-1\relax% + \expandafter\pgfPT@removezeros\pgfPT@postdot\relax% + \ifx\pgfPT@testb@semzeros\pgfPT@relax\relax\edef\pgfPT@testb@semzeros{\pgfPT@digits@toround}\fi% + \edef\pgfPT@shiftval{\pgfPT@testb@semzeros.\pgfPT@predot\pgfPT@afterdot}% +\fi\fi% +}% +% +\def\pgfPT@rem@vefinaldot#1.\relax{\edef\pgfPT@afterdot{#1}}% +% +\def\pgfPT@movedot#1#2\relax{\ignorespaces% +\def\pgfPT@testc{#1} +\def\pgfPT@testb{#2}% +\ifpgfPT@temp\edef\pgfPT@predot{}\edef\pgfPT@postdot{}\pgfPT@tempfalse\fi% +\ifnum\pgfPT@countf<\pgfPT@displace\relax% + \edef\pgfPT@predot{\pgfPT@predot#1}% + \edef\pgfPT@postdot{#2}% + \global\advance\pgfPT@countf by1\relax% + \expandafter\pgfPT@movedot#20\relax% +\fi% +}% +% +\def\pgfPT@removezeros#1#2\relax{\ignorespaces% +\edef\pgfPT@testa{#1}\edef\pgfPT@testb{#2}% +\global\advance\pgfPT@counte by1\relax% +\pgfPT@checkifdigitiszero{#1}% +\ifpgfPT@temp\edef\pgfPT@testb@semzeros{#2}\ifnum\pgfPT@counte<\pgfPT@countf\relax\pgfPT@removezeros#2\relax\fi% +\else% + \ifnum\pgfPT@counte<\pgfPT@countf\relax% + \edef\pgfPT@testb@semzeros{#1#2}% + \else% + \edef\pgfPT@testb@semzeros{\pgfPT@testb@semzeros}% + \fi% +\fi% +}% +% +\def\pgfPT@checkifdigitiszero#1{\ifnum#1=0\relax\pgfPT@temptrue\else\pgfPT@tempfalse\fi}% +% +\def\pgfPT@strlen#1\relax{\ignorespaces% +\pgfPT@countf=0% +\def\pgfPT@tmp{#1}% +\ifx\pgfPT@tmp\pgfPT@relax\relax\else\@pgfPT@str@len#1 \relax\fi% +}% +% +\def\@pgfPT@str@len#1#2 \relax{\ignorespaces% +\global\advance\pgfPT@countf by1\relax% +\def\pgfPT@tmp{#2}% +\ifx\pgfPT@tmp\pgfPT@relax\relax\else\@pgfPT@str@len#2 \relax\fi% +}% +% -------------------------------------------------------------------------------------------------- \endinput% |