2016-09-21 32 views
2

私はFloat.toString()メソッドを使用すると数字の丸めを行う以下のコードに関する質問があります。それはなぜこれをするのですか?その背後にある特定の論理はありますか?Float.toString()が数値を変更するのはなぜですか?

Float.toString()の内部コードも見てきました。それはFloatingDecimal(f).toJavaFormatString()と呼んでいます。

public static void main(String[] args) {        
    Float f = Float.intBitsToFloat(1342177280); 

    String simpleString = new BigDecimal(f).toPlainString(); 
    System.out.println("simpleString value " + simpleString); 

    String withToString = new BigDecimal(Float.toString(f)).toPlainString(); 
    System.out.println("withToString value " + withToString); 
} 

出力はBigDecimalのコンストラクタは簡単です。この

simpleString value 8589934592 
withToString value 8589934600 //here value changed 
+1

FloatをDoubleに変更します。私は、仮数部が浮動小数点数の精度よりも大きいということだけを推測することができます。 –

+1

単にFloat.toStringがこれを返すからです:8.5899346E9ので、BigDecimalは残っているものだけを使うことができます – AxelH

+0

これは、FloatのtoString実装で選択された精度のようですが、 –

答えて

1

のようなものです。私にストリングを与え、私はストリングを使って数字を作ります。あなたが私に番号を与えたら、私は彼の価値を直接使用します。

あなたの例で生成されるStringは8.5899346E9のように見えるので、平方の数値は8589934600です。 floatインスタンスを送信した場合、可能な限り正確に値を再作成するために、ビットとともに動作します(私は推測します)。

関連する問題