2017-08-30 28 views
-1
double value1 = 1000 
double value2 = 2563.59 
System.out.println("value1 ="+String.format("%.2f",value1)); 
System.out.println("value2 ="String.format("%.2f",value2)); 

Output 
value1 = 1000.00 
value2 = 2563.60 

這返回1000.002563.60但輸出更改爲串類型。四捨五入雙爲2個小數,而不改變該數據類型

我想要1000.002563.60作爲輸出而不改變數據類型。

任何人都可以幫助我嗎?

的dtatype必須加倍本身

+1

輸出打印出來,所以無關緊要,如果它的類型是String,int,double ..爲什麼「不改變數據類型」?^^ – azro

+0

'double value1 = 1000.00; double value2 = 2563.60;'? –

+0

它可以「通過」另一種數據類型嗎? –

回答

0

注意double類型的存儲值,而不是字符串。有些情況下將它舍入到小數點後兩位不會改變任何內容。例如,值爲1。如果您在1上執行String.format,則它將變爲1.00。然而,11.00是相同的值,因此將1轉換爲小數點後兩位使其再次成爲1double認爲11.00是相同的值(我的意思是,他們真的,它只是格式不同)。

另請注意,double值不準確。它可能看起來好像是1.23,但實際上它可能類似於1.2300000000000001

要糾正雙到2 D.P.,所有你需要做的就是格式化字符串轉換回雙:

String str = String.format("%.2f",value1)); 
double result = Double.parseDouble(str); 
0

不要使用String.format(..),如果你不希望它變成一個字符串。

請參考Decimal Format

// 2 places of decimal 
DecimalFormat formatter = new DecimalFormat("#.00"); 

System.out.println(formatter.format(1.23)); // 1.23 
System.out.println(formatter.format(1));  // 1.00 
System.out.println(formatter.format(1.234)); // 1.23 
0

爲什麼要排在首位使用的String.Format?

DecimalFormat f = new DecimalFormat("##.00"); 
System.out.println(f.format(value1)); 

您需要導入java.text.DecimalFormat;此

0

使用BigDecimal.setScale()和使用四捨五入方式天花板

double value1 = 1000; 
    double value2 = 2563.59; 

    System.out.println("Before"); 
    System.out.println("value1 = " + value1); 
    System.out.println("value2 = " + value2); 

    value1 = BigDecimal.valueOf(value1).setScale(1, RoundingMode.CEILING).doubleValue(); 
    value2 = BigDecimal.valueOf(value2).setScale(1, RoundingMode.CEILING).doubleValue(); 

    System.out.println("After"); 
    System.out.println("value1 = " + value1); 
    System.out.println("value2 = " + value2); 
0

在使用有限的精度,二進制浮點數字什麼 - 這是Java的默認和大多數編程語言 - 的概念「小數位數「僅適用於顯示。內部二進制表示沒有「小數位」的概念,因爲數據不是小數。

因此,小數位數僅適用於數據的顯示方式,與顯示的數據類型無關。

當出現關於舍入十進制數字的問題時,通常是因爲程序員還沒有完全理解浮點數學如何工作。