我正在學習使用C#進行代碼編寫,因爲我喜歡語言提供的內容,並且在學習練習中我做了一個問題。使用cast和使用float進行解析時接收完全不同的答案
練習的要點是學習聲明變量,使用它們並顯示它們。
我的代碼,它的工作原理,是這樣的:
//Declare variables
float originalFahrenheit;
float calculatedFahrenheit;
float calculatedCelsius;
//Asks for fahrenheit
Console.Write("Enter temperature in fahrenheit: ");
originalFahrenheit = float.Parse(Console.ReadLine());
//Calculations
calculatedCelsius = ((originalFahrenheit - 32)/9) * 5;
calculatedFahrenheit = ((calculatedCelsius * 9)/5) + 32;
//Display calculations
Console.WriteLine(originalFahrenheit + " degrees fahrenheit is " + calculatedCelsius + " degrees celsius");
Console.WriteLine(calculatedCelsius + " degrees celsius is " + calculatedFahrenheit + " degrees fahrenheit");
Console.ReadKey();
當用戶輸入「70」華氏度的答案是正確顯示。
華氏輸入溫度:70
華氏70度是21.11111攝氏度
21.11111攝氏度華氏70度
現在,我嘗試使用 '鑄造' 只是因爲和代碼編譯的結果不一樣:
這是代碼:
//Asks for fahrenheit
Console.Write("Enter temperature in fahrenheit: ");
originalFahrenheit = (float)Console.Read;
這是我得到了答案:
華氏輸入溫度:70
華氏55度是12.77778攝氏度
12.77778攝氏度是55華氏度
我想知道這是爲什麼發生。對於這樣的情況鑄造沒有好處,或者我的語法不好?
請再提一個問題。當改變:
originalFahrenheit = (float)Console.Read
到
originalFahrenheit = (float)Console.Readline()
我得到一個異常。看到下面請圖片:
Changing Console.Read to Console.ReadLine using casting
它主要是告訴我,我不能轉換類型「字符串」到「浮動」。
當改變:
originalFahrenheit = float.Parse(Console.ReadLine());
到
originalFahrenheit = float.Parse(Console.Read());
我得到另一個異常。看到它下面有請:
Changing 'Console.ReadLine' to 'Console.Read' using Parse
例外情況告訴我,我可以鍵入「詮釋」不是轉換爲「字符串」
它爲什麼會發生? 'ReadLine'和'Read'在代碼中如何發揮作用?
Console.Read返回一個整數,它表示單個字符類型的代碼。 (您可以在55值中看到它,因爲這是字符'7'的ASCII碼)要讀取整個「70」號碼,您需要兩次調用Read。使用Console.ReadLine – Steve
哦。我現在明白爲什麼會出現55。那麼'不能將int轉換爲字符串'呢?使用'float.Parse(Console.Read())'?如果程序只讀'7',因爲我用'讀'爲什麼它告訴我我不能將int轉換爲字符串?我真的希望我能在這裏理解我自己。 – Eduardo
如果系統不支持轉換,或者您已經編寫了[顯式方法](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/explicit),則無法使用轉換。爲了它。現在支持將一個int轉換爲float(Read情況),不支持將一個字符串轉換爲一個float(ReadLine),最後一個問題(float.Parse)簡直是錯誤的,因爲Parse需要一個字符串並傳遞一個整數。 – Steve