2017-05-29 47 views
-1

我正在學習使用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'在代碼中如何發揮作用?

+2

Console.Read返回一個整數,它表示單個字符類型的代碼。 (您可以在55值中看到它,因爲這是字符'7'的ASCII碼)要讀取整個「70」號碼,您需要兩次調用Read。使用Console.ReadLine – Steve

+0

哦。我現在明白爲什麼會出現55。那麼'不能將int轉換爲字符串'呢?使用'float.Parse(Console.Read())'?如果程序只讀'7',因爲我用'讀'爲什麼它告訴我我不能將int轉換爲字符串?我真的希望我能在這裏理解我自己。 – Eduardo

+0

如果系統不支持轉換,或者您已經編寫了[顯式方法](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/explicit),則無法使用轉換。爲了它。現在支持將一個int轉換爲float(Read情況),不支持將一個字符串轉換爲一個float(ReadLine),最後一個問題(float.Parse)簡直是錯誤的,因爲Parse需要一個字符串並傳遞一個整數。 – Steve

回答

0

C#不允許從string轉換爲float。這些操作必須使用Float.Parse()明確。

您的代碼讀取55度的原因是因爲Console.Read()會從輸入流中讀取下一個字符。該字符只是整數編碼,因此在此處投射是允許的,您不會遇到異常。此外,如果您檢查ASCII表格 - 例如http://www.asciitable.com/ - 您會看到7(您的第一個字符)編碼爲55.

您的下一個部分拋出異常的原因是Console.ReadLine()是因爲該函數返回一個string(輸入流中的所有字符,直到下一個新行字符)。在這種情況下,正如我們之前所建立的那樣,C#不允許投射。

Float.Parse(Console.Read())並不完全有道理的,因爲Float.Parse需要一個字符串,而是 - 如指出上述 - Console.Read()返回int


欲瞭解更多信息,看看從MSDN這些引用: https://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspxhttps://msdn.microsoft.com/en-us/library/system.console.readline(v=vs.110).aspx

相關問題