Will printf('%.9e', value) always print the exact base10 representation?
No.  Consider 0.5, 0.25, 0.125, 0.0625 ....  Each value is one-half the preceding and needs another decimal place for each decremented power of 2.
float, often binary32 can represent values about pow(2,-127) and sub-normals even smaller.  It would take 127+ decimal places to represent those exactly.  Even counting only significant digits, then number is 89+.  Example  FLT_MIN on one machine is exactly
0.000000000000000000000000000000000000011754943508222875079687365372222456778186655567720875215087517062784172594547271728515625
FLT_TRUE_MIN, the smallest non-zero sub-normal is 151 digits:
0.00000000000000000000000000000000000000000000140129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125
By comparison, FLT_MAX only takes 39 digits.
340282346638528859811704183484516925440
Rarely are exact decimal representation of float needed.  Printing them to FLT_DECIMAL_DIG (typically 9) significant digits is sufficient to uniquely display them.  Many systems do not print exact decimal representation beyond a few dozen significant digits.
Vast majority of systems I have used printed float/double exactly to at least DBL_DIG significant digits (typically 15+).  Most systems do so at least to DBL_DECIMAL_DIG (typically 17+) significant digits.
Printf width specifier to maintain precision of floating-point value gets into these issues.  
printf('%.*e', FLT_DECIMAL_DIG - 1, value) will print a float to enough decimals places to scan it back and get the same value - (round-trip).