2013-10-17 75 views
-1

對於在學校的項目,我必須製作一個Java程序來從數據庫中檢索數據。如何總是以小數點後兩位數進行舍入

這是我的代碼:

import java.text.*; 
import java.util.*; 
public class Tijdstip 
{ 
    public Tijdstip() 
    { 
    } 
    public double testTijd(String tijdstip1) 
    { 
     // splitting the time 
     String[] tokens = tijdstip1.split("\\s+"); 
     int hours = Integer.parseInt(tokens[0]); 
     int minutes = Integer.parseInt(tokens[1]); 
     //returning the time 
     double result = hours + ((double)minutes/100); 
     return result;  
    } 
} 

我填一時間成爲像字符串:「7 10」,意思是上午7時10分,它必須返回一個雙象7.10 但它返回7.1,怎麼辦我做到了,所以它會返回7.10而不是7.1?

+4

7小時10分鐘是7.1666小時,而不是7.1小時...... – Boann

+4

你真的想把時間存儲在一個雙? –

+0

@Boann它沒關係,我只是希望它顯示7.10 – Denny

回答

2

你要明白之間的數字是如何表示和它是如何顯示的差異。 7.1和7.10之間沒有數字差異;沒有辦法使編號而不是另一個。您可以使用輸出格式(如Format類中的格式)display 7.1 as 7.10。

作爲一個側面的問題:將它存儲爲雙精度是任何大小的程序中的一個壞主意。表示時間的類有很多,它們都考慮了時間劃分的非十進制性質。雙打不這樣做。

+1

真的沒有辦法將它作爲7.10返回嗎? – Denny

+1

@Denny它是一個數字,而不是一個字符串,7.1 == 7.10 == 7.100 = 7.1000 == 7.10000,它返回**全部**,同時 –

+1

@Denny無論你是用7.10還是7.1來初始化一個double ,內部存儲器位是相同的。雙變量不可能記住差異。你可以通過執行'System.out.println(Long.toBinaryString(Double.doubleToLongBits(7.1)));'和'System.out.println(Long.toBinaryString(Double.doubleToLongBits(7.10))來看到內部的零和);'。你會看到他們是一樣的。 – Boann

0

當你返回double時,如果它是零,它總是會截斷你的最後一個數字。所以使它成爲一個字符串,返回

+0

不,它不會。答案基本上是無稽之談。 – EJP

+2

@EJP這有點簡單,但它是完全正確的。 – Boann

+0

@Boann如果它沒有意義,它是不正確的。 「如果最後一個數字爲零,則截斷」是什麼意思?如果它意味着'截斷最後的零位',那肯定是不正確的。 – EJP

2

試試這個

new DecimalFormat("#.00").format(result); 
-1

如果你需要的只有兩個dicimal後數字雙重價值,你可以嘗試以下操作:

double d = 1.164444;  
double r = Math.rint(d * 100)/100; 
System.out.println(r); 
1

簡短的回答是,你無法做到這一點,如果你必須保持結果的兩倍。這個double不知道任何關於前導或尾隨的零。只有當結果格式化爲字符串時才能執行此操作。例如,String.format("%.2f", 7.1)給出字符串"7.10"。每次顯示號碼時都可以輕鬆進行此格式設置,但不能讓號碼本身記住額外的零。

相關問題