2014-11-04 58 views
0

對於此任務,我需要使用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 

我不知道是什麼導致了這些錯誤,因爲我不認爲我已經使用了雙旦,以及錯誤的非常快速的谷歌並沒有幫助我。

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

請將您的代碼發佈到問題的正文中,而不是作爲圖片。同時告訴我們錯誤在代碼中發生的位置,所以我們不必試圖找出事情發生的地方。 – 2014-11-04 14:24:02

+6

十進制文字用'm'後綴表示,因此如果構造函數需要'decimal'參數,則需要使用'新的BankAccount(142.50m)'。 – Lee 2014-11-04 14:25:44

+0

我敢打賭你有一個函數,它返回一個double,你試圖傳遞給一個小數,沒有強制轉換。這就是說,我看不到你的代碼,因爲我的工作塊imgur。 – IllusiveBrian 2014-11-04 14:25:46

回答

6

這裏:

BankAccount account = new BankAccount(142.50); 

你逝去的double文字142.50。的BankAccount,但是,需要一個decimal literal代替:

BankAccount account = new BankAccount(142.50m); 

注意m後面的數字。

+0

太棒了,就是它的排序。當StackOverflow允許我在10分鐘內完成時,我會將您的答案標記爲正確。 不知道爲什麼工作表包含此錯誤,我想他們會在實驗室會議中指出,一旦有人意識到有錯誤,但不幸的是我睡過了它... – Sam 2014-11-04 14:27:59

+0

請注意,您需要添加當你調用'Withdraw'方法時,或者在任何其他地方使用小數。 – 2014-11-04 14:28:04

2

MSDN for C#'s decimal有簡單的答案(甚至是例子)。

您已經使用權decimal對於這種操作的:

十進制關鍵字表示128位數據類型。與浮點類型相比,小數類型具有更高的精度和更小的範圍,因此適用於財務和貨幣計算。

而且使用decimal文字要求m後綴:

如果你想有一個數字實數將被視爲小數,使用後綴m或M,例如:

decimal myMoney = 300.5m;

如果沒有後綴m,則該數字將被視爲double並生成編譯器錯誤。從文檔

另外兩個進口點:

  • 有浮點類型和小數類型之間的隱式轉換;因此,必須使用投射來在這兩種類型之間進行轉換。

  • 您還可以在同一表達式中混合使用十進制和數字整數類型。但是,在不進行強制轉換的情況下混合使用十進制和浮點類型會導致編譯錯誤。

這樣你就不會慢慢地總結了許多0.1 which is periodic number in binary建立例如錯誤這是非常重要的。

相關問題