【发布时间】:2016-02-05 09:52:19
【问题描述】:
static void Main(string[] args)
{
double creditcardbalance;
creditcardbalance = GetPositiveDouble("Enter In Credit Card Balance");
double monthlypayementamount;
monthlypayementamount = GetPositiveDouble("Enter In Monthly Payement Amount");
double percentagerate;
percentagerate = (int)GetPositiveDecimal("Enter In Percentage Rate");
CreditCardMonths();
}
static void CreditCardMonths()
{
double dailyinterestrate;
double payoff;
double percentagerate = 0;
double creditcardbalance = 0;
double monthlypayementamount = 0;
dailyinterestrate = (double)percentagerate / 365;
payoff = (int)(-(1d / 30) * Math.Log(1 + creditcardbalance / monthlypayementamount * (1 - Math.Pow(1 + dailyinterestrate, 30))) / Math.Log(1 + dailyinterestrate)) + 1;
Console.WriteLine("It will take {0} months to pay off the loan", payoff);
displaymenu();
Console.ReadKey();
}
一旦在 main 方法中声明了 CreditCardMonths() 方法,我的公式的答案在它应该返回正数时返回负整数。?? 我错过了什么?
我的完整代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DebtCalculator
{
class Program
{
static void Main(string[] args)
{
double creditcardbalance;
creditcardbalance = GetPositiveDouble("Enter In Credit Card Balance");
double monthlypayementamount;
monthlypayementamount = GetPositiveDouble("Enter In Monthly Payement Amount");
double percentagerate;
percentagerate = (int)GetPositiveDecimal("Enter In Percentage Rate");
CreditCardMonths();
}
这是一段代码作品:
double creditcardbalance;
Console.WriteLine("Enter in credit card balance:");
creditcardbalance = double.Parse(Console.ReadLine());
double monthlypayementamount;
Console.WriteLine("Enter in the monthly payement amount:");
monthlypayementamount = double.Parse(Console.ReadLine());
double percentagerate;
Console.WriteLine("Enter in annual percentage rate:");
percentagerate = double.Parse(Console.ReadLine());
// outputs
double payoff;
double dailyinterestrate;
// Daily interest formula calculated by apr divided by 365
dailyinterestrate = percentagerate / 365;
//Introducing formula for output
//Payoff needed to display whole numbers, although in ints output 1/30 = 0 so adding 1d (double) allows precise calculation.+1 allows it to round up to the nearest dollar.
payoff = (int)(-(1d / 30) * Math.Log(1 + creditcardbalance / monthlypayementamount * (1 - Math.Pow(1 + dailyinterestrate, 30))) / Math.Log(1 + dailyinterestrate)) + 1;
//Introduce output for display
{
Console.WriteLine("It will take {0} months to pay off the loan", payoff);
Console.WriteLine("Goodbye");
// keep console open
Console.ReadKey();
但似乎通过创建一个名为 CreditCardMonths 的方法返回一个负整数? 我的 Y/N 循环方法也不起作用。
static void CreditCardMonths()
{
double dailyinterestrate;
double payoff;
double percentagerate = 0;
double creditcardbalance = 0;
double monthlypayementamount = 0;
dailyinterestrate = (double)percentagerate / 365;
payoff = (int)(-(1d / 30) * Math.Log(1 + creditcardbalance / monthlypayementamount * (1 - Math.Pow(1 + dailyinterestrate, 30))) / Math.Log(1 + dailyinterestrate)) + 1;
Console.WriteLine("It will take {0} months to pay off the loan", payoff);
displaymenu();
Console.ReadKey();
}
static decimal GetPositiveDecimal(string message)
{
decimal value = 0;
Console.WriteLine(message);
value = decimal.Parse(Console.ReadLine());
while (value <= 0)
{
Console.WriteLine("invalid input. Please enter a non negative Decimal");
Console.WriteLine(message);
value = decimal.Parse(Console.ReadLine());
}
return value;
}
static double GetPositiveDouble(string message)
{
double value = 0;
Console.WriteLine(message);
value = double.Parse(Console.ReadLine());
while (value <= 0)
{
Console.WriteLine("Invalid Input . Enter In A Non Negative Number");
Console.WriteLine(message);
value = double.Parse(Console.ReadLine());
}
return value;
}
static void menuItem()
{
char menuItem;
{
menuItem = GetUpperCaseYN();
ProcessMenuItem(menuItem);
}
Console.WriteLine("Thank you, goodbye.");
Console.ReadLine();
}
static char GetUpperCaseYN()
{
char menuItem;
menuItem = char.Parse(Console.ReadLine());
menuItem = char.ToUpper(menuItem);
while (menuItem != 'Y' && menuItem != 'N')
{
Console.WriteLine("Invalid Menu Item");
menuItem = char.Parse(Console.ReadLine());
menuItem = char.ToUpper(menuItem);
}
return menuItem;
}
static void displaymenu()
{
Console.WriteLine("Calculate Another? (Y/N)");
}
static void ProcessMenuItem(char menuItem)
{
switch (menuItem)
{
case 'Y':
;
break;
case 'N':
Console.ReadKey();
Console.WriteLine("Goodbye!");
Console.ReadKey();
break;
}
Console.ReadKey();
}
}
}
【问题讨论】:
-
在 CreditCardMonths 方法上放置一个断点并逐步验证您的值。您应该能够找到您的问题。还要确保你没有声明一个局部范围的变量来掩盖一个方法/类范围的变量