summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex')
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex90
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%