How to safely and reasonably convert a float or double to string or char array?

No, apparently you don't understand how numbers work. There are no such thing as numbers that have more or less digits than other numbers. All numbers have an infinite number of digits. If you say 1 then I can say 1.0 and someone else can say 1.00. Whether or not you write all the digits when you write the number back to the human doesn't matter. The math isn't being done with the output of dtostrf. The math is being done with the actual floating point number. So you're not losing on your math. Your math in your program is safe. The only thing that String is for is showing the human what the value is. And if you try to show him 35 digits then you are lying to your user about the value.

If the result is some number with 35 digits why in the world would a user want you to output that as a 35 digit number with only 6 that matter and 29 that are basically just made up when you can give him scientific notation and only the part that's accurate and actually conveys the value.

This problem isn't unique to computers. Big numbers come up in science all the time and with propagation of error from measurements we know how many significant digits we actually have. And we don't ever write out 35 digit numbers there. At least not unless we actually have 35 digits of precision.

Sure, big numbers might come up and they come up all the time. But that doesn't mean it makes sense to write them all the way out without scientific notation.