2010-02-02 210 views
14

我想做一個這樣的操作:如果給定的浮點數類似於1.0,2.0,3.0,我想將它們保存爲整數(1,2,3)的數據庫,如果它們是如1.1,2.1,3.44,我將它們保存爲浮點數。使用java的這個問題的最佳解決方案是什麼?數據庫中的相應字段是varchar的類型。Java將浮點數轉換爲整數

+0

這真是令人困惑;你問如何使用Float.toString(val)? – Will 2010-02-02 09:24:52

+0

你確定浮點數真的最適合你的問題域嗎?如果你想精確,你應該使用BigDecimal – 2010-02-02 09:28:00

回答

19

試試int i = (int) f;

編輯:我看到了問題中的觀點。此代碼可能工作:數量

int i = (int) f; 
String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f); 
+1

這將把所有浮點值轉換爲整數,這並不是真正的原始問題。 – 2010-02-02 09:24:06

+1

浮子弦呢,夥計?你將一個float轉換爲int。這不是我想要的。 – Sawyer 2010-02-02 09:27:30

+1

其實這工作正常:它不是所有浮點值轉換爲整數。它將int值存儲在「i」中,僅用於與浮點值進行比較。如果它是相同的(即它以.0結尾),那麼它返回「i」,否則它將返回原始值作爲字符串... @Tony,valToStore是一個字符串。這是你要求的... – Philippe 2010-02-02 09:55:17

5
String result = "0"; 
if (floatVar == Math.floor(floatVar)) { 
    result = Integer.toString((int) floatVar); 
} else { 
    result = Float.toString(floatVar); 
} 

的if子句檢查是否是一個整數 - 即如果它等於四捨五入下來到最接近的整數值的結果。

但這確實是非常奇怪的要求,也許你應該重新考慮這種事情的需要。

+3

他要求一個整數字符串,所以轉換爲int的行應該是沿着String str = Integer.tostring((int)floatVar)行的東西; – 2010-02-02 09:31:11

+0

啊,是的,錯過了「整數串」部分。謝謝 – Bozho 2010-02-02 09:36:08

+0

謝謝,但我不認爲這很快。 – Sawyer 2010-02-02 09:39:23

0

不知道這是最好的解決辦法,但你可以嘗試寫這樣的方法:

String convertToString(Float f) { 
    if (f.toString().endsWith(".0")) 
     return f.intValue().toString(); 
    else 
     return f.toString(); 
} 
1

好像要保存花車沒有尾隨數字爲整數,同時節省那些顯著尾隨數字作爲花車。我寧願只是這一切保存爲浮動到數據庫,但它是你的問題所以這裏是我的答案:

/** 
    * Method to determine if trailing numbers are significant or not. Significant 
    * here means larger than 0 
    * 
    * @param fFloat 
    * @return 
    */ 
    public static boolean isTrailingSignificant(Float fFloat) 
    { 
    int iConvertedFloat = fFloat.intValue();// this drops trailing numbers 
    // checks if difference is 0 
    return ((fFloat - iConvertedFloat) > 0); 
    } 

這是你將如何使用此方法:

Number oNumToSave = null; 
if (isTrailingSignificant(fFloat)) 
{ 
    // save float value as is 
    oNumToSave = fFloat; 
} 
else 
{ 
    // save as int 
    oNumToSave = fFloat.intValue();// drops trailing numbers  
} 

之後,你就可以使用變量oNumToSave執行數據庫操作。