次のステートメントは、以下をdouble
除くすべての(Javaプリミティブ倍精度IEEE-754)に当てはまりNaN
ますか?
Double.parseDouble(String.valueOf(d)) == d
別の言い方をすれば、シリアル化された(String.valueOf()を使用して)double値を解析すると、常に正確な元のdoubleが生成されますか?
次のステートメントは、以下をdouble
除くすべての(Javaプリミティブ倍精度IEEE-754)に当てはまりNaN
ますか?
Double.parseDouble(String.valueOf(d)) == d
別の言い方をすれば、シリアル化された(String.valueOf()を使用して)double値を解析すると、常に正確な元のdoubleが生成されますか?
あなたが言ったようにNaNを除いて、そうです、その不変条件は成り立つはずです。そうでない場合、それはまさにそこにあるJDKのバグです。
Double.toString
そのJavadocでこれを言います:
mまたはaの小数部分に何桁印刷する必要がありますか?小数部分を表すには少なくとも1桁必要であり、それを超えると、引数値をdouble型の隣接する値と一意に区別するために必要な桁数だけになります。つまり、xが、有限の非ゼロ引数dに対してこのメソッドによって生成された10進表現によって表される正確な数学値であると仮定します。その場合、dはxに最も近いdouble値でなければなりません。または、2つのdouble値がxに等しく近い場合、dはそれらの1つであり、dの仮数の最下位ビットは0である必要があります。
要約すると、このdoubleを一意に識別するのに十分な桁数を返すためDouble.parseDouble
、文字列に変換されたものとまったく同じdoubleを返す必要があります。