从双精度转换为十进制

本文关键字:十进制 转换 双精度 | 更新日期: 2023-09-27 18:27:12

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

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(decimal)"匹配的最佳重载方法包含一些无效参数

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

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

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

从双精度转换为十进制

不要使用decimal作为温度,double就足够了。

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

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

1.0double,而不是decimal。使用后缀mM将数字标记为decimal
("M"代表"货币",因为这种类型通常用于金融交易。)

(input - 32) * 5M / 9M

您甚至不需要* 1.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",您必须更改方法签名才能返回字符串。