从double转换为decimal

时间:2012-03-07 12:30:16

标签: c# double decimal

我正在使用Google天气XML文件在C#中开发天气应用程序,但我在类文件中使用计算时遇到问题。我试图用下面的方法将farenheit转换成celcius:

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

“input”是调用天气数据的地方,例如最高温度。今天的。我在编译时遇到以下错误:

  

错误23:'Weather.Helper.CalculateTemp(decimal)'的最佳重载方法匹配有一些无效的参数

     

错误24:参数1:无法从'double'转换为'decimal'

     

错误25:运算符'/'不能应用于'decimal'和'double'类型的操作数

我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:6)

不要将decimal用于温度,double就足够了。

此外,不要返回"°C"因为它是一个数字,而不是一个字符串:

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

答案 1 :(得分:5)

1.0double,而不是decimal。使用后缀mM将数字标记为decimal (“M”代表“Money”,因为此类型通常用于金融交易。)

(input - 32) * 5M / 9M

,您甚至不需要* 1.0

答案 2 :(得分: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",您必须更改方法签名以返回字符串。