2012-03-07 5 views
2

Google weather XMLファイルを使用してC#で気象アプリケーションを開発していますが、クラスファイルでの計算に問題があります。私はfolliowing方法で摂氏に華氏に変換しようとしています:気象データは、このような最高温度と呼ばれているところ二重から十進への変換

public static class Helper 
{ 
    public static decimal CalculateTemp(decimal input) 
    { 
    return Math.Round((input - 32) * 5/9/1.0) * 1.0 + "°C"; 
    } 
} 

は、「入力」です。今日の。私は、コンパイル時に次のエラーを取得しています:

エラー23:引数1:変換することはできません「Weather.Helper.CalculateTemp(10進数)」のための最良のオーバーロードされたメソッドの試合は、いくつかの無効な引数

エラー24を持っています「ダブル」から「小数」

エラー25:演算子「が/」「進」と「double」の

タイプのオペランドに適用することができない私は、この問題を解決する方法がわからないです..

+3

saneコードを書き、1で除算しない、1で掛けない、浮動小数点数に文字列を追加しないでください。コンパイラは "ああ、実際には意味していた"ようになります。 –

答えて

6

温度にはdecimalを使用しないでください。doubleで十分です。

public static double CalculateTemp(double input) 
{ 
    return Math.Round((input - 32) * 5/9); 
} 
+1

本当です。そして彼は整数に丸めるので、浮動小数点はまったく必要ない。しかし、彼の質問はエラーがどこから来たのかということでした。エラーメッセージは、この例が実際のプログラムの単純化されたケースであることを示唆しています。 –

+0

ありがとうございます! –

5

1.0double、ないdecimalである:それは数ではなく、文字列です原因

また、"°C"を返しません。番号mまたはMを使用して、番号をdecimalとマークします。
(このタイプは通常の金融取引のために使用される「M」は、「お金」の略です。)

(input - 32) * 5M/9M 

し、小数点を使用したい場合はあなたも* 1.0

0

を必要としません

public static class Helper 
{ 
    public static string CalculateTemp(decimal input) 
    { 
     return Math.Round(((input - 32) * 5/9/1.0m)) + "°C"; 
    } 
} 

か::

public static class Helper 
{ 
    public static string CalculateTemp(decimal input) 
    { 
     return Math.Round(((input - 32) * 5/9/(decimal)1.0)) + "°C"; 
    } 
} 
(というよりも、二重)、あなたはようにリファクタリングする必要があると思います

最後に"°C"のために文字列を返すようにメソッドシグニチャを変更する必要があることにも注意してください。

関連する問題