2017-03-17 66 views
-2

我有這個目前爲止,但我需要得到我的值最多到小數點後兩位,但由於某種原因,我畫了一個空白的如何做到這一點馬上。如何將我的值轉換爲只有兩位小數

{ 
public static double celciusToFahrenheit(double celcius) 
{ 
    double fahrenheit = (9.0/5) * celcius + 32; 
    return fahrenheit; 
} 

public static double fahrenheitToCelcius(double fahrenheit) 
{ 
    double celcius = (5.0/9) * (fahrenheit - 32); 
    return celcius; 
} 

    public static void main(String[] args) 
    { 
    System.out.println("Celcius\tFahrenheit\t|\tFahrenheit\tCelcius"); 

    for (int i = 0; i < 10; i++) 
    { 

     double celcius = 40 - i; 
     double convertedCelcius = celciusToFahrenheit(celcius); 
     double fahrenheit = 120 - (i * 10); 
     double convertedFahrenheit = fahrenheitToCelcius(fahrenheit); 

     System.out.print(celcius + "\t" + convertedCelcius + "\t|\t" + fahrenheit + "\t" + convertedFahrenheit + "\n"); 
    } 
    } 
} 

和我的結果看起來像這樣

Celcius Fahrenheit | Fahrenheit Celcius 
40.0 104.0 | 120.0 48.88888888888889 
39.0 102.2 | 110.0 43.333333333333336 
38.0 100.4 | 100.0 37.77777777777778 
37.0 98.60000000000001 | 90.0 32.22222222222222 
36.0 96.8 | 80.0 26.666666666666668 
35.0 95.0 | 70.0 21.11111111111111 
34.0 93.2 | 60.0 15.555555555555557 
33.0 91.4 | 50.0 10.0 
32.0 89.6 | 40.0 4.444444444444445 
31.0 87.80000000000001 | 30.0 -1.1111111111111112 
+2

使用'DecimalFormat'定義所需的格式輸出。 – STaefi

+0

但是,當我使用DecimalFormat它給了我一個錯誤,說「找不到符號」 – derekg8881

+2

這是一個完全不同的問題 – csmckelvey

回答

1

使用方法

roundValue(convertedFahrenheit)

public static double roundValue(double value, int numberOfDecimalPlaces) { 
       long factor = (long) Math.pow(10, numberOfDecimalPlaces); 
      value = value * factor; 
      long tmp = Math.round(value); 
      return (double) tmp/factor; 
     } 
+0

只要你在'(long)Math.pow(10,2)'中使用魔術數字,反正使用'100L'有什麼問題? –

+0

@LewBloch在這裏我沒有使用100L直接,因爲可能是用戶想要綜合到三,所以在這裏,他只是改變2的值,並使用3.我知道我已經硬編碼的價值,這是錯誤的,因爲我們應該使用run這裏的時間參數會根據請求的參數返回值,但在這裏他只提到了2個硬編碼。 –

+0

對不起,什麼?舍入與'10'平方爲'100'無關,不需要舍入。但我真的無法從你說的話中解析你的觀點。 –

0

試試這個

public static double round(double value, int places) 
{ 
    if (places < 0) throw new IllegalArgumentException(); 

    BigDecimal bd = new BigDecimal(value); 
    bd = bd.setScale(places, RoundingMode.HALF_UP); 
    return bd.doubleValue(); 
} 
0

你可以使用兩個輔助方法padRightroundTwoDecimalPlace

import java.math.BigDecimal; 
import java.math.RoundingMode; 

class Main{ 
    public static double celciusToFahrenheit(double celcius) { 
    double fahrenheit = (9.0/5) * celcius + 32; 
    return fahrenheit; 
    } 

    public static double fahrenheitToCelcius(double fahrenheit) { 
    double celcius = (5.0/9) * (fahrenheit - 32); 
    return celcius; 
    } 

    public static double roundTwoDecimalPlace(double value) { 
    BigDecimal bd = new BigDecimal(value); 
    bd = bd.setScale(2, RoundingMode.HALF_UP); 
    return bd.doubleValue(); 
    } 

    public static String padRight(String s, int n) { 
    return String.format("%1$-" + n + "s", s); 
    } 

    public static void main(String[] args) { 
    System.out.println(padRight("Celcius", 15) + padRight("Fahrenheit", 15) + padRight("Celcius", 15) + padRight("Fahrenheit",15)); 
    for (int i = 0; i < 10; i++) { 
     double celcius = roundTwoDecimalPlace(40 - i); 
     double convertedCelcius = roundTwoDecimalPlace(celciusToFahrenheit(celcius)); 
     double fahrenheit = roundTwoDecimalPlace(120 - (i * 10)); 
     double convertedFahrenheit = roundTwoDecimalPlace(fahrenheitToCelcius(fahrenheit)); 
     System.out.println(padRight(String.valueOf(celcius), 15) + padRight(String.valueOf(convertedCelcius) , 15) + padRight(String.valueOf(fahrenheit), 15) + padRight(String.valueOf(convertedFahrenheit) ,15)); 
    } 
    } 
} 

輸出:

Celcius  Fahrenheit  Celcius  Fahrenheit  
40.0   104.0   120.0   48.89   
39.0   102.2   110.0   43.33   
38.0   100.4   100.0   37.78   
37.0   98.6   90.0   32.22   
36.0   96.8   80.0   26.67   
35.0   95.0   70.0   21.11   
34.0   93.2   60.0   15.56   
33.0   91.4   50.0   10.0   
32.0   89.6   40.0   4.44   
31.0   87.8   30.0   -1.11 

試試吧here!

相關問題