2015-08-31 41 views
3

好吧,我知道這裏有一個很相似的問題,但它並沒有完全回答我的問題。請讓我知道我是否做錯了。打印前3位小數無四捨五入

我已經寫了一個程序,從用戶獲取華氏溫度並將其轉換爲Celcius。它看起來像這樣:

import java.util.Scanner; 

public class FahrenheitToCelcius { 

    public static void main(String[] args) { 

     double fahrenheit; 
     Scanner sc = new Scanner(System.in); 

     System.out.print("Please enter a temperature in Fahrenheit: "); 

     fahrenheit = sc.nextDouble(); 
     double celcius = (fahrenheit - 32) * 5/9; 

     String num = String.format("%.3f", celcius); 

     System.out.println(" "); 
     System.out.println(fahrenheit + "F" + " is " + num + "C"); 
    } 
} 

當它打印答案時,我只想打印前3個小數位,但不是圓形。例如,如果輸入爲100F,我想要37.777C印刷,而不是37.778C

我試過使用DecimalFormatString.format(如上),但兩種方法打印出37.778C。有一個更好的方法嗎?

謝謝你的回答,如果這是重複的,我很抱歉。

+0

謝謝你的編輯,約翰。 –

回答

6

您可以使用DecimalFormat,只需設置RoundingMode

DecimalFormat df = new DecimalFormat("#.###"); 
df.setRoundingMode(RoundingMode.FLOOR); 
String num = df.format(celcius); 
+0

太棒了!這工作完美!乾杯 –

3

乘攝氏1000至1000

超過300點

celsius = celsius * 1000; 

現在地板的數量和分動小數

celsius = Math.floor(celsius)/1000;  

它將刪除需要的String.format() 方法。

0

這個答案是類似於使用Math.floor但可能容易只是強制轉換爲int:

想保留2位小數?試試這個:

System.out.println((int) (your_double * 100)/100.0);

希望3位小數?試試這個:

System.out.println((int) (your_double * 1000)/1000.0);

希望4位小數?試試這個:

System.out.println((int) (your_double * 10000)/10000.0);

看到這個模式?將您的雙倍數乘以10,以達到您想要的小數位數。投射後,除以相同的十進制零。