控制台计算应用程序仅返回 0
本文关键字:返回 应用程序 计算 控制台 | 更新日期: 2023-09-27 18:03:41
所以我对编码相当陌生,我只是把0拉回来作为回报。我在运行时输入 10000 5 和 10 作为我的 3 个输入,除了所有三个字段的 0 之外,我无法从中返回任何内容。我想也许我的程序想要变量的起点,所以我将它们全部声明为 0 开始,但它仍然不起作用。
int AIR, MIR, PMT, IP, PP, ABorrowed, Term;
AIR = 0;
MIR = 0;
PMT = 0;
IP = 0;
PP = 0;
ABorrowed = 0;
Term = 0;
Console.WriteLine("Please enter the amount borrowed on your loan ");
ABorrowed = int.Parse(Console.ReadLine());
Console.WriteLine("Please enter the interest rate for your loan ");
AIR = int.Parse(Console.ReadLine());
Console.WriteLine("Please enter term of your loan in months ");
Term = int.Parse(Console.ReadLine());
MIR = AIR / 12;
PMT = ABorrowed * (MIR/((1-(1/(1+MIR))^Term)));
IP = ABorrowed * MIR;
PP = PMT - IP;
Console.WriteLine("Your total payment for this month is " + PMT);
Console.WriteLine("Of that payment " + IP + " is interest rate");
Console.WriteLine("and the Payment Portion is " + PP);
Console.ReadLine();
此代码中有几个与您的描述相关的问题:
- 您正在使用整数除法
- 您(很可能(错误地使用
^
除法返回一个整数,意思是:
10 / 3 = 3
如果您使用decimal
而不是int
作为您的类型,则更有可能获得正确的结果。
此外,你在那里使用^
,我认为这是你提升某些东西到其他东西的力量的方式,但^
是XOR
运算符,它完全做其他事情。
若要在 C#/.NET 中将某些内容提升到其他内容的强大功能,请使用 Math.Pow:
PMT = ABorrowed * (MIR/((1-Math.Pow((1/(1+MIR)), Term))));
(我想我设法在这里的正确部分放置了 Math.Pow 调用(
这里的核心问题是你使用的是int
. 这种类型只能代表整数,对于财务计算来说很糟糕。 在计算货币时,使用decimal
而不是int
使用十进制而不是 int ^
不是它独有的功能,或者我怀疑这是你想要的。而是使用Math.Pow
实际上,查看代码,您可以使用var
避免一些麻烦,而不是在开始时声明所有内容。
Console.WriteLine("Please enter the amount borrowed on your loan ");
var ABorrowed = decimal.Parse(Console.ReadLine());
Console.WriteLine("Please enter the interest rate for your loan ");
var AIR = decimal.Parse(Console.ReadLine());
Console.WriteLine("Please enter term of your loan in months ");
var Term = decimal.Parse(Console.ReadLine());
var MIR = AIR / 12;
var PMT = ABorrowed * (MIR/((1-Math.Pow((1/(1+MIR)), Term))));
var IP = ABorrowed * MIR;
var PP = PMT - IP;
Console.WriteLine("Your total payment for this month is " + PMT);
Console.WriteLine("Of that payment " + IP + " is interest rate");
Console.WriteLine("and the Payment Portion is " + PP);
Console.ReadLine();
除法运算符 '/' 截断为最接近零的整数,因此分配给 MIR 会破坏一切。
您已将变量声明为 INT,因此,如果您输入 5 表示AIR
则MIR = AIR / 12
将为零,因为 5/12 将转换为零。因此,PMT
和IP
将为零,PP
将为零。
您应该对变量类型使用 decimal
,而不是int
。