无法从双精度转换为十进制错误

时间:2014-11-04 14:23:38

标签: c#

对于这项任务,我需要使用BankAccount程序做一些事情,但首先我需要复制得到的示例运行。我已完全按照下面的屏幕截图所示复制了作业表中的代码,但我收到的错误如下所示。

Error   2   Argument 1: cannot convert from 'double' to 'decimal' Line 13 Column 51
Error   1   The best overloaded method match for 'BankAccount.BankAccount.BankAccount(decimal)' has some invalid arguments Line 13 Column 35    
Error   4   Argument 1: cannot convert from 'double' to 'decimal' Line 13 Column 30 
Error   3   The best overloaded method match for 'BankAccount.BankAccount.Withdraw(decimal)' has some invalid arguments Line 18 Column 13   

我不知道是什么导致了这些错误,因为我认为我没有使用过一次双重错误,并且Google的错误很快就帮助了我。

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

namespace BankAccount
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create Bank Account & Print Balance
            BankAccount account = new BankAccount(142.50);
            Console.WriteLine("Account Balance is: " + account.ToString());

            // Withdraw £30.25
            Console.WriteLine("Withdrawing £30.25");
            account.Withdraw(30.25);

            // Print balance again
            Console.WriteLine("Account Balance is: " + account.ToString());
        }
    }

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

namespace BankAccount
{
   public class BankAccount
    {
       private decimal _balance;

       public decimal Balance
       {
           get { return _balance; }
           private set { _balance = value; }
       }

       //Constructor: Constructs a new Bank Account with 0 balance
       public BankAccount()
       {
           Balance = 0;
       }

       //Constructor: Constructs a new Bank Account with the specified balance
       public BankAccount(decimal balance)
       {
           Balance = balance;
       }

       //Deposits the specified amount into the Bank Account
       public void Deposit(decimal amount)
       {
           Balance += amount;
       }

       //Withdraws the specified amount from the Bank Account
       public void Withdraw(decimal amount)
       {
           Balance -= amount;
       }

       //ToString Override
       public override string ToString()
       {
           return string.Format("{0}: Balance = {1}", "BankAccount", Balance);

       }
    }
}

2 个答案:

答案 0 :(得分:12)

下面:

 BankAccount account = new BankAccount(142.50);

您正在传递double文字142.50。但是,BankAccount需要decimal literal代替:

 BankAccount account = new BankAccount(142.50m);

请注意数字背后的m

答案 1 :(得分:3)

MSDN for C#'s decimal中有简单的答案(甚至是示例)。

您有权使用decimal进行此类操作:

  

decimal关键字表示128位数据类型。与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币计算。

使用decimal文字需要m后缀:

  

如果您希望将数字实数文字视为十进制,请使用后缀m或M,例如:

     

decimal myMoney = 300.5m;

     

如果没有后缀m,则将该数字视为double并生成编译器错误。

另外两个来自文档的导入点:

  
      
  • 浮点类型和十进制类型之间没有隐式转换;因此,必须使用强制转换来转换这两种类型。

  •   
  • 您还可以在同一表达式中混合使用十进制和数字积分类型。但是,在没有强制转换的情况下混合使用十进制和浮点类型会导致编译错误。

  •   

这很重要,因此您不会慢慢建立错误,例如总结许多0.1 which is periodic number in binary