2011-09-17 57 views
0

我有一個程序,我正在努力將二進制,十進制或十六進制數字有效地轉換爲其他格式(不要問爲什麼我這樣做,我老實說,知道)。到目前爲止,我只有一個二進制 - 十進制轉換,並且它工作正常,但無論何時輸入的二進制數字是8位或更多它崩潰。Java從科學計數法轉換爲浮點數

據我可以告訴我什麼時候輸入數字10011001它被轉換爲科學記數法,併成爲1.0011001E7這不會真的是一個問題,除了我轉換數字的方式涉及創建一個字符串與與數字相同的值並將其分解爲單個字符。不幸的是,這意味着我有一個字符串值「1.0011001E7」,而不是「10011001」,所以當我切斷字符時,我擊中了「。」。當我嘗試用此計算時,程序不知道該怎麼做。所以基本上我的問題歸結到這一點,我如何強制它使用非科學記數法版本進行這些計算?

感謝您的幫助,這裏是代碼,如果它有助於在所有:

//This Splits A Single String Of Digits Into An Array Of Individual Digits 
public float[] splitDigits(float fltInput){ 
    //This Declares The Variables 
    String strInput = "" + fltInput; 
    float[] digit = new float[strInput.length() - 2]; 
    int m = 0; 


    //This Declares The Array To Hold The Answer 
    for (m = 0; m < (strInput.length() - 2); m++){ 
     digit[m] = Float.parseFloat(strInput.substring(m, m + 1)); //Breaks here 
    } 

    //This Returns The Answer 
    return digit; 
} 
+2

輸入應該以字符串形式出現,而不是數字形式。 –

+0

嗯,回想起來,我可能不應該將它轉換爲數字,直到我將數字分開爲止。謝謝,我沒有意識到我可以將它作爲一個字符串離開,那個人正在盯着我。 – Doug

+0

沒有問題:) –

回答

6

只需使用BigDecimal

BigDecimal num = new BigDecimal(fltInput); 
String numWithNoExponents = num.toPlainString(); 

注意這裏的fltInput將自動轉換爲double。

+0

這可以工作多達8或9位數,這絕對是一個改進,但在此之後,它會四捨五入。不知何故「111111111」= 111111167.不知道這是怎麼發生的,但是一旦我把它作爲一個字符串,它自己就行了。感謝您的幫助。 – Doug

+0

沒問題。將它作爲字符串保留是絕對處理BigInteger和BigDecimal的首選方式,但是您的方法簽名以float開頭,並且我不想假設您可以以字符串的形式訪問數據。我很高興它爲你工作。 – dlawrence