运算符(*)不能应用于'object'和'double'类型的操作数

Tur*_*dov -3 c#

这是我的代码.我无法理解是什么问题,但Visual Studio 2008说

运算符(*)不能应用于'object'和'double'类型的操作数

谢谢 ...

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;

#endregion

namespace DailyRate
{
    class Program
    {
        static void Main(string[] args)
        {
            (new Program()).run();
        }

        public void run()
        {
            double dailyRate = readDouble("Enter your daily rate: ");
            int noOfDays = readInt("Enter the number of days: ");
            writeFree(CalculateFee(dailyRate, noOfDays));
        }

        private void writeFree(object p)
        {
            Console.WriteLine("The consultant's fee is: {0}", p * 1.1);
        }

        private double CalculateFee(double dailyRate, int noOfDays)
        {
            return dailyRate * noOfDays;
        }

        private int readInt(string p)
        {
            Console.Write(p);
            string line = Console.ReadLine();
            return int.Parse(line);
        }

        private double readDouble(string p)
        {
            Console.Write(p);
            string line = Console.ReadLine();
            return double.Parse(line);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 26

到目前为止十六个答案,十五个答案告诉你做错了.

首先,正如大家告诉你的那样,你不能将对象乘以双倍.但解决方案不是将双倍乘以一倍! 你正在进行财务计算; 从不使用双打进行财务计算.双打是物理问题,而不是金钱问题.

正确的做法是首先停止使用双打.你应该使用decimal,而不是double.

(当你解决这个问题时:C#中的标准是对CapitalizeYourMethodsLikeThis,而不是喜欢这个.)

  • @AndrewBarber:实际上问题并不是用*浮点*表示钱,而是使用*二进制浮点*而不是*十进制浮点*.毕竟,你不太可能处理那么大的金额,以至于这一点的浮动性很重要.问题是二进制浮点不能准确地表示在处理货币时可能出现的值(这些是我们的基数10直觉告诉我们的确切值).四舍五入的规则也不太可能达到你想要的货币价值. (2认同)