2012-04-30 27 views
0

請原諒,如果這個問題真的很明顯,但我已經嘗試了一切。用小於零的數字計算

我想製作一個計算器來計算一個數字的百分比。

但它保持輸出的輸出0時,我使用此代碼:

import java.io.*; 

class pCalc { 
    public static void main(String args[]) 
    { 
      InputStreamReader istream = new InputStreamReader(System.in) ; 
      BufferedReader bufRead = new BufferedReader(istream) ; 

      System.out.println("Hello..."); 

      try { 
       System.out.println("Please Enter In The Percentage You Want To Find (e.g 25): "); 
       String rpercent = bufRead.readLine(); 

       System.out.println("Please Enter In The Number You Wish To Find The Percentage Of (e.g 200): "); 
       String rnumber = bufRead.readLine(); 


       int repercent = Integer.parseInt(rpercent); 
       int number = Integer.parseInt(rnumber); 
       int percent = repercent/100; 

       int awnswer = number * percent ; 

       System.out.println("Percent is: " + percent); 
       System.out.println("Awnswer is: " + awnswer); 
      } 
      catch (IOException err) { 
       System.out.println("Error reading line"); 
      } 
      catch(NumberFormatException err) { 
       System.out.println("Error Converting Number"); 
      }   
    } 
} 
+0

遵循良好的編程習慣。在開始時聲明所有變量。 –

+2

Steve McConnel在Code complete中表示,變量不必在聲明中聲明=) –

+2

@SachinMhetre在頂部聲明變量不僅是Java中的推薦做法;即使在ANSI C中也不推薦。 –

回答

1

int是自然數(或它的負...等等,int是整數),它不能是0或1之間的任何東西,如果你想看到的東西像0,25

必須使用 floatdouble
2

你的問題就在這裏:

 int repercent = Integer.parseInt(rpercent); 
     int number = Integer.parseInt(rnumber); 
     int percent = repercent/100; 

的整數除法的結果最終將是一個整數,因此,例如,如果計算產量爲0.2,則它將更改爲0

做這樣的事情所以應該修復它:

double repercent = Double.parseDouble(rpercent); 
    double number = Double.parseDouble(rnumber); 
    double percent = repercent/100.0; 
+0

+1。並且只想評論Double.valueOf()和Integer.valueOf()比Integer.parseInt()和Double.parseDouble()更好。 – Rudy

0

int percent = repercent/100;將無法​​正常工作。 Usefloatdouble數據類型。

1

嘗試使用float代替int

float repercent = Float.parseFloat(rpercent); 
float number = Float.parseFloat(rnumber); 
float percent = repercent/100; 
0

我已經清理你的代碼位。正如其他人所指出的那樣,主要問題是過早除以100。除去異常處理,因爲它是多餘的,並且掩蓋默認異常處理程序打印的完整堆棧跟蹤。

package test; 

import static java.lang.Integer.parseInt; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Test { 
    public static void main(String args[]) throws Exception { 
    final BufferedReader bufRead = new BufferedReader(new InputStreamReader(System.in)) ; 
    System.out.println("Hello..."); 
    System.out.println("Please Enter In The Percentage You Want To Find (e.g 25): "); 
    final int percent = parseInt(bufRead.readLine()); 
    System.out.println(
     "Please Enter In The Number You Wish To Find The Percentage Of (e.g 200): "); 
    final int number = parseInt(bufRead.readLine()); 
    final int answer = number * percent/100; // or use a floating-point type here 
    System.out.println("Percent is: " + percent); 
    System.out.println("Answer is: " + answer); 
    } 
}