对于这项任务,我需要使用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);
}
}
}
答案 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。