2013-03-12 62 views
1

所以我對編碼相當陌生,而且我只迴避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(); 
+1

需要注意的是,您不應該從用戶輸入中解析整數目錄並將其分配給整數。如果他們輸入'asdf',你的程序將崩潰。而是使用'int.TryParse()'。十進制也有這個方法可用。 – 2013-03-12 22:55:46

+0

由於JaredPar聲稱你應該使用Decimal而不是Int,如果你看看你的代碼,你現在的第一個計算是AIR/12,如果我正確讀取你的AIR是5的話?換句話說,你的第一個公式是5/12,當以int形式返回時,你的MIR的值爲0,因此在所有其餘的公式中,你乘以0,因此你得到的值爲0.如果你從詮釋爲十進制你的概率應該被解決。 :) – Heinrich 2013-03-12 23:07:20

回答

3

有這個代碼與您介紹幾個問題:

  1. 您使用整數除法
  2. 你使用正確^

首先,整數(最有可能)除法返回整數,意思是:

10/3 = 3 

如果您爲類型使用decimal而不是int,則更有可能獲得正確的結果。

此外,您使用的是有^,我以爲是你養的東西的別的力量的方式,但^XOR運營商,它不完全是另一回事。 。

要提高的東西的其他在C#/。NET的東西的力量,你用Math.Pow

PMT = ABorrowed * (MIR/((1-Math.Pow((1/(1+MIR)), Term)))); 

(我認爲我設法在這裏設置正確的零件周圍的Math.Pow調用)

+0

我將它切換到math.pow並且還使用了雙打......在一些簡單易懂的調整之後馬上工作。非常感謝你的幫助! – Zi0n1 2013-03-12 23:01:48

+0

沒問題。請記住,如果他們回答您的問題,您可以在這裏接受答案,只需在投票下方的綠色複選標記中查找答案即可。歡迎來到Stack Overflow,希望你留下來。 – 2013-03-12 23:07:14

+1

@ user2052853:儘量保持* decimal *的財務計算;你會得到更少的怪異舍入錯誤。 – 2013-03-12 23:28:04

2

這裏的核心問題是您使用的是int。這種類型只能表示整數,對於財務計算來說很糟糕。當計算錢使用decimal而不是int

0

除法運算符'/'截短到最近的整數接近零,所以分配給MIR clobbers的一切。

+0

如果'AIR'是一個小數,並且您使用'12m'而不是'12',轉換應該可以正常工作。 – 2013-03-12 22:57:03

1

使用小數點而不是整數和^是不是它的獨佔或我懷疑是你的目的。相反使用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(); 
+0

「對於金錢,總是十進制的,這就是它創建的原因。」 http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-當 – 2013-03-12 22:59:53

+0

啊對,我的意思是小數點:) – 2013-03-12 23:00:42

0

您已經聲明的變量爲INT,因此,如果您AIR進入5然後MIR = AIR/12將是零,因爲5/12被轉換到零。因此,PMTIP將爲零,並且PP將爲零。

您應該使用decimal而不是int作爲您的變量類型。

相關問題