【问题标题】:Convert from double to decimal从双精度转换为十进制
【发布时间】:2012-03-07 12:30:15
【问题描述】:

我正在使用 Google 天气 XML 文件在 C# 中开发天气应用程序,但在类文件中使用计算时遇到问题。我正在尝试使用以下方法将华氏温度转换为摄氏度:

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:运算符“/”不能应用于“十进制”和“双精度”类型的操作数

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

【问题讨论】:

  • 编写合理的代码,不要除以 1,不要乘以 1,不要将字符串附加到浮点数,编译器会“啊,这就是你的意思” .

标签: c# double decimal


【解决方案1】:

温度不要用decimaldouble就够了。

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

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

【讨论】:

  • 确实如此。而且由于他四舍五入到整数,他甚至根本不需要浮点数。但他的问题是错误是从哪里来的,错误信息表明这个例子是他实际程序的一个非常简化的例子,所以也许他确实需要一个decimal
【解决方案2】:

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

(input - 32) * 5M / 9M

你甚至不需要* 1.0

【讨论】:

    【解决方案3】:

    如果你想使用小数(而不是双精度),你必须重构为:

    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",您必须更改方法签名以返回字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多