2012-03-07 3 views
2

Я разрабатываю приложение погоды на C# с использованием файла погоды Google Google, и у меня возникают проблемы с использованием вычислений в файле класса. Я пытаюсь преобразовать Фаренгейта в Цельсия с помощью метода folliowing:Преобразование из двоичного в десятичное

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

«вход», где данные о погоде называют такие, как самой высокой температуры. сегодня. Я получаю следующие ошибки при компиляции:

Ошибки 23: лучший перегруженный матч метода для «Weather.Helper.CalculateTemp (десятичного)» имеют некоторые недопустимые аргументы

Ошибка 24: Аргумент 1: не может конвертировать от «двойной» до «десятичной»

Error 25: Оператор «/» не может быть применен к операндам типа «десятичной» и «двойной»

Я не уверен, как это исправить ..

+3

Напишите разумный код, не делите на 1, не умножайте на 1, не добавляйте строки к числам с плавающей запятой, и компилятор поймет «ах, вот что вы на самом деле имели в виду». –

ответ

6

Не используйте decimal для температуры, double достаточно.

Кроме того, не возвращают "°C" потому что это число, а не строка:

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

Так верно. И поскольку он округляется до целых чисел, ему даже не нужна плавающая точка. Но его вопрос был в том, откуда произошла ошибка, и сообщения об ошибках показывают, что этот пример является очень упрощенным случаем его реальной программы, поэтому, возможно, ему действительно нужен «десятичный». –

+0

Большое спасибо! –

5

1.0 является double, не decimal. Используйте суффикс m или M, чтобы отметить номер как decimal.
(«М» означает «деньги», так как этот тип обычно используется для финансовых операций.)

(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" в конце.

Смежные вопросы