EDITED to solve both input forms. EDITED so that either capital or lowercase E is permitted in the scientific notation (e.g., 1E6 or 1e6).
EDITED to automatically discern multipliers of 1, 10 or 100 on standard units.
If the prefix is outside the range of 1E-24 to 1E26, a ?? is output.
See SUPPLEMENT for more general use of multipliers (outside of 1, 10, 100).
As this answer has expanded with EDITS, let me explan the logic. There are 3 macros that call each other in sequence. Let me work my way from the end to the beginning. The lowest level macro is
\prefixSN[<multiplier>]{1E<SI-prefix-integer>}
The multiplier defaults to 1, but can be 10 or 100. The SI-prefix-integer are specific integers for which an SI prefix is defined (-24, -21, ...-6, -3, -2, -1, 0, 1, 2, 3, 6, ...21, 24). If the provided integer is not in this list, a ?? is output. If the integer is in the list, the appropriate SI-prefix is output following the multiplier.
The macro that feeds \prefixSN in the proper syntax is called \prefixmult, with syntax
\prefixmult{1E<integer>}
Here integer should be in the range -24 to 26. Based on the value of the integer, it sets the prefix as 1, 10, or 100, and adjusts the integer to the next lower SI standard value. For example if the input to \prefixmult was 1E5, it would set the call \prefixSI[100]{1E3}.
The top-level macro, \prefix, which feeds \prefixmult its integer format, can take input in four possible form s:
\prefix{1E<integer>}
\prefix{1e<integer>}
\prefix{10<...>0}
\prefix{.0<...>01}
It sorts through looking for an E or e. Finding one, it passes the capital-E form to \prefixmult with the associated integer. If no E is found, it looks for a decimal point, a 1 and multiple 0 tokens. Based on what it finds, it reconstructs the associated integer based on the number of zeros and passes it onto \prefixmult.
Here is the MWE.
\documentclass{article}
\usepackage{siunitx,listofitems}
\newcommand\prefixSN[2][1]{#1\,\prefixSNaux#2\relax}
\def\prefixSNaux 1E#1\relax{%
\ifnum#1=0\relax\else
\ifnum#1=-1\relax\textrm{d}\else
\ifnum#1=-2\relax\textrm{c}\else
\ifnum#1=-3\relax\textrm{m}\else
\ifnum#1=-6\relax\textrm{\ensuremath{\mu}}\else
\ifnum#1=-9\relax\textrm{n}\else
\ifnum#1=-12\relax\textrm{p}\else
\ifnum#1=-15\relax\textrm{f}\else
\ifnum#1=-18\relax\textrm{a}\else
\ifnum#1=-21\relax\textrm{z}\else
\ifnum#1=-24\relax\textrm{y}\else
\ifnum#1=1\relax\textrm{da}\else
\ifnum#1=2\relax\textrm{h}\else
\ifnum#1=3\relax\textrm{k}\else
\ifnum#1=6\relax\textrm{M}\else
\ifnum#1=9\relax\textrm{G}\else
\ifnum#1=12\relax\textrm{T}\else
\ifnum#1=15\relax\textrm{P}\else
\ifnum#1=18\relax\textrm{E}\else
\ifnum#1=21\relax\textrm{Z}\else
\ifnum#1=24\relax\textrm{Y}\else
??%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\newcommand\prefix[1]{%
\setsepchar{1E||1e}%
\readlist\scinot{#1}%
\ifnum\scinotlen>1\relax
\itemtomacro\scinot[2]\temp%
\expandafter\prefixmult\expandafter{\expandafter1\expandafter E\temp}%
\else
\setsepchar{./1/0}%
\readlist\zerocount{#1}%
\ifnum\zerocountlen=1\relax
\expandafter\prefixmult\expandafter{\expandafter1\expandafter E%
\the\numexpr\listlen\zerocount[1,2]-1\relax}%
\else
\expandafter\prefixmult\expandafter{\expandafter1\expandafter E%
\expandafter-\the\numexpr\listlen\zerocount[2,1]\relax}%
\fi
\fi
}
\newcommand\prefixmult[1]{\prefixmultaux#1\relax}
\def\prefixmultaux 1E#1\relax{%
\setsepchar{E4||E7||E10||E13||E16||E19||E22||E25||%
E-5||E-8||E-11||E-14||E-17||E-20||E-23}%
\readlist\factormult{E#1}%
\ifnum\factormultlen>1\relax
\prefixSN[10]{1E\the\numexpr#1-1\relax}
\else
\setsepchar{E5||E8||E11||E14||E17||E20||E23||E26||%
E-4||E-7||E-10||E-13||E-16||E-19||E-22}%
\readlist\factormult{E#1}%
\ifnum\factormultlen>1\relax
\prefixSN[100]{1E\the\numexpr#1-2\relax}
\else
\prefixSN[1]{1E#1}%
\fi
\fi
}
\begin{document}
\prefix{1E6}\par
\prefix{1E-15}\par
\prefix{1e-6}\par
\prefix{100}\par
\prefix{1000000}\par
\prefix{.001}\par
\prefix{.000001}\par
\prefix{1E5}\par
\prefix{10000}\par
\prefix{.0001}\par
\prefix{1E7}\par
\prefix{1E-5}\par
\prefix{1E8}\par
\prefix{1E-4}
\end{document}

SUPPLEMENT
Not sure if this is an improvement, as it seems to me that the \prefix should deal solely in powers of 10. However, if one wished for a more general implementation that could handle any multiplier of a single significant digit, then here it is:
\documentclass{article}
\usepackage{siunitx,listofitems}
\newcommand\prefixSN[2][1]{#1\,\prefixSNaux#2\relax}
\def\prefixSNaux 1E#1\relax{%
\ifnum#1=0\relax\else
\ifnum#1=-1\relax\textrm{d}\else
\ifnum#1=-2\relax\textrm{c}\else
\ifnum#1=-3\relax\textrm{m}\else
\ifnum#1=-6\relax\textrm{\ensuremath{\mu}}\else
\ifnum#1=-9\relax\textrm{n}\else
\ifnum#1=-12\relax\textrm{p}\else
\ifnum#1=-15\relax\textrm{f}\else
\ifnum#1=-18\relax\textrm{a}\else
\ifnum#1=-21\relax\textrm{z}\else
\ifnum#1=-24\relax\textrm{y}\else
\ifnum#1=1\relax\textrm{da}\else
\ifnum#1=2\relax\textrm{h}\else
\ifnum#1=3\relax\textrm{k}\else
\ifnum#1=6\relax\textrm{M}\else
\ifnum#1=9\relax\textrm{G}\else
\ifnum#1=12\relax\textrm{T}\else
\ifnum#1=15\relax\textrm{P}\else
\ifnum#1=18\relax\textrm{E}\else
\ifnum#1=21\relax\textrm{Z}\else
\ifnum#1=24\relax\textrm{Y}\else
??%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\newcommand\prefix[1]{%
\setsepchar{E||e}%
\readlist\scinot{#1}%
\ifnum\scinotlen>1\relax
\itemtomacro\scinot[1]\premult%
\itemtomacro\scinot[2]\temp%
\expandafter\expandafter\expandafter\prefixmult
\expandafter\expandafter\expandafter{%
\expandafter\premult\expandafter E\temp}%
\else
\setsepchar{./1||2||3||4||5||6||7||8||9/0}%
\readlist\zerocount{#1}%
\ifnum\zerocountlen=1\relax
\expandafter\expandafter\expandafter\def
\expandafter\expandafter\expandafter\temp
\expandafter\expandafter\expandafter{\zerocountsep[1,1]}%
\expandafter\expandafter\expandafter\prefixmult
\expandafter\expandafter\expandafter{%
\expandafter\temp\expandafter E%
\the\numexpr\listlen\zerocount[1,2]-1\relax}%
\else
\expandafter\expandafter\expandafter\def
\expandafter\expandafter\expandafter\temp
\expandafter\expandafter\expandafter{\zerocountsep[2,1]}%
\expandafter\expandafter\expandafter\prefixmult
\expandafter\expandafter\expandafter{%
\expandafter\temp\expandafter E%
\expandafter-\the\numexpr\listlen\zerocount[2,1]\relax}%
\fi
\fi
}
\newcommand\prefixmult[1]{\prefixmultaux#1\relax}
\def\prefixmultaux #1E#2\relax{%
\setsepchar{E4||E7||E10||E13||E16||E19||E22||E25||%
E-5||E-8||E-11||E-14||E-17||E-20||E-23}%
\readlist\factormult{E#2}%
\ifnum\factormultlen>1\relax
\prefixSN[#10]{1E\the\numexpr#2-1\relax}
\else
\setsepchar{E5||E8||E11||E14||E17||E20||E23||E26||%
E-4||E-7||E-10||E-13||E-16||E-19||E-22}%
\readlist\factormult{E#2}%
\ifnum\factormultlen>1\relax
\prefixSN[#100]{1E\the\numexpr#2-2\relax}
\else
\prefixSN[#1]{1E#2}%
\fi
\fi
}
\begin{document}
\prefix{4E6}\par
\prefix{1E-15}\par
\prefix{1e-6}\par
\prefix{300}\par
\prefix{1000000}\par
\prefix{.001}\par
\prefix{.000004}\par
\prefix{1E5}\par
\prefix{10000}\par
\prefix{.0001}\par
\prefix{5E7}\par
\prefix{1E-5}\par
\prefix{3E8}\par
\prefix{1E-4}
\end{document}

siunitxcalls in a prescribed way, or is what you are showing in your example sufficient? – Steven B. Segletes Jun 24 '19 at 16:53pgfplotshas a library calledunitsfor these things. – Jun 24 '19 at 20:53