2012-10-02 81 views
2

這是我的程序。非常簡單地說,它應該將輸入的數字四捨五入到給定的小數位數。即4.245四捨五入到2位小數會得到4.25。但是,我總是隻能將它舍入到一個整數後面...爲什麼?更令人不解的是,我使用相同的代碼在Android和它完美的作品Math.round()無法正常工作

import java.util.Scanner; 


public class Rounder { 

public static void main(String[] args) { 
    double input1, roundednumber; 
    int input2; 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("number to round "); 
    input1 = keyboard.nextDouble(); 
    System.out.println("decimals"); 
    input2 = keyboard.nextInt(); 

    roundednumber = rounder(input1, input2); 
    System.out.println(roundednumber); 
} 


public static double rounder(double number, int decimals){ 
    int multiplier = (int) Math.pow(10, decimals); 
    double roundednumber; 
    roundednumber = Math.round(number*multiplier)/multiplier; 
    return roundednumber;  
} 
} 

這裏是從我的android類的片斷

double result1 = fv1/(Math.pow(1+(r1/n1),n1*t1)); 
result1 = (double) (Math.round(result1 * 100))/100; 
+1

爲了四捨五入,你可以更好地嘗試[BigDecimal](http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html).. –

+2

你正在做一個整數除法: Math.round()返回一個int值,然後除以int。寫Math.round(...)/(double)相乘;代替。 –

+0

試圖做「十進制」舍入像'double's這樣幾乎保證讓你不好的結果。 –

回答

6

分水嶺一個整數產生一個整數,所以你可以使用:

Math.round(number * multiplier)/(double)multiplier; 
+0

謝謝......完全忘了我用int分開......謝謝 – Killerpixler

0

通過嘗試

roundednumber = Math.round(number*multiplier)/((double)(multiplier)); 
0

這是因爲Math.round()返回一個int值,並且除以int值。從而導致int。