2011-09-17 15 views
0

私は、効果的にバイナリ、10進数、または16進数を他のフォーマットに変換するプログラムを持っています。なぜこれをやっているのか尋ねません。知っている)。これまでのところ、バイナリの小数変換が行われていますが、入力された2進数が8桁以上になると正常に動作します。Java Scientific NotationからFloatへの変換

数値を入力するとわかるように、それは科学的表記法に変換され、1.0011001E7になります。ただし、数字を変換する方法には問題がありません。数字と同じ値にして個々の文字に分割します。残念ながら、これは "10011001"の代わりに "1.0011001E7"という文字列を持っていることを意味します。プログラムはそれを使って計算しようとすると何をすべきか分からない。ですから、基本的に私の質問はこれに当てはまります。これらの計算に非科学記法バージョンを使用するにはどうすればよいですか?

すべてのあなたの助けのおかげで、ここでそれがすべて場合に役立ちますコードです:

//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

だけfltInputが自動的にdoubleに変換されますここにBigDecimal

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

注意を使用しています。

+0

これは最大8桁または9桁の数字に対応していますが、これは間違いなく改善ですが、その後は四捨五入されます。何とか "111111111" = 111111167。それがどう起こったのか分かりませんが、一度それを文字列として残してしまえば、それ自体は機能しました。しかし、助けてくれてありがとう。 – Doug

+0

問題ありません。 BigIntegerとBigDecimalの両方を処理するには、文字列として残しておくのが好ましい方法ですが、メソッドシグネチャが浮動小数点数で開始されたため、データに文字列としてアクセスすると仮定したくありませんでした。私はあなたのために働いてうれしいです。 – dlawrence

関連する問題