I edited your question to get the syntax highlighting. It just helps me see the code better. Hope that's OK. :D
Anyway, on to your questions!
You're right, Console.Write isn't mentioned or described before this particular problem. In fact, digging a bit further, it doesn't seem to be actually described anywhere in the book. (Though I think most people will pick it up from that sample code there in the book.)
Technically speaking, you don't need Console.Write to accomplish the task at hand in that particular problem. You could use Console.WriteLine. But in this context, Console.Write is a bit prettier, and I definitely ought to adjust that chapter to include at least a brief description of it, so that it doesn't catch people off guard. So I appreciate you pointing it out.
Convert.ToDouble isn't intended to convert written-out words into numbers. The scope covered in that method is simply to take a string that stores the numbers themselves (but stored as a string) and turn it into the double type.
Being able to parse written-out numbers is actually a fairly complex problem. There are lots and lots of things you'd have to account for to make it work well. It probably wouldn't be too hard if you limit the options to just the strings, "zero", "one", "two", … "nine". You could do some string comparisons to see if those are a match. But if you open up the options to something far broader (any text representation of numbers, for example) then it becomes a rather complicated natural language processing problem.
Consider for example the number 1904.2. If you enter the string "1904.2", Convert.ToDouble will function correctly. But if we want to allow for the user to enter any text representation of that number, there are tons and tons of possibilities. Here are a few examples:
- one thousand nine hundred and four point two
- nineteen oh four point two
- nineteen hundred and four point two
- nineteen hundred four point two
- one nine oh four point two
- one nine zero four point two
- one niner zero four point two
- one thousand nine hundred four and two tenths
Plus a number of typographical variances. Hyphenations, spacing issues, "a" vs. "one", etc.
And that's not even to mention if you want to account for spelling errors. "zreo" instead of "zero" "to" vs. "two" etc.
And that's just some of the variants for this one particular number. Other numbers are more complicated, or at least, introduce additional complexities.
It's not that that isn't possible. It is. I'm sure there's even a 3rd party library out there that will do all of that for you if you Google it.
But hopefully that helps illustrate the complexity of parsing user input when you allow them to enter words when you need numbers (and then try to parse it). If you look around though, nearly every program, application, and website that expects numbers (for a ZIP code, phone number, or whatever) they'll always reject non-numeric input, even if it is technically parsable, or in a written format that a human might be able to understand.
But the Convert.ToWhatever methods do provide a key role in converting between the built-in types, and I don't think that should get discounted. That's a very useful tool to know about. You'll use it quite often for a variety of things.
Anyway, I hope that helps answer some of the things you were wondering about. Don't hesitate to ask if you have other questions!