Преобразовать из двойного в десятичное - PullRequest
2 голосов
/ 07 марта 2012

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

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: невозможно преобразовать из «double» в «decimal»

Ошибка 25: оператор «/» не может быть применен к операндам типа «decimal» и «double»

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

Ответы [ 3 ]

6 голосов
/ 07 марта 2012

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

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

public static double CalculateTemp(double input)
{
    return Math.Round((input - 32) * 5 / 9);
}
5 голосов
/ 07 марта 2012

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

(input - 32) * 5M / 9M

и вам даже не понадобится * 1.0

0 голосов
/ 07 марта 2012

если вы хотите использовать десятичную (а не двойную), вам нужно будет выполнить рефакторинг как:

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

...