0

私はこのコードを持っています。「テキスト」は値の例に強制されます

  public static String binStringToRealString(String text, int precision) {
    String result = "";
    long longBits;
    Double doubleValue;

    text = "0011111111110001100110011001100110011001100110011001100110011010";

    longBits = Long.parseLong(text, 2);
    Log.d(TAG, "longBits = " + longBits);
    // longBits = 4607632778762754458

    doubleValue = Double.longBitsToDouble(longBits);
    Log.d(TAG, "doubleValue = " + doubleValue);
    // doubleValue = 1.1

    result = doubleValue.toString();
    Log.d(TAG, "result = " + result);

    return result;
}

どうにかして丸められない doubleValue を取得できますか?

実際の値は 1.1000000000000008881784197001 です

このコンバーターのように http://www.binaryconvert.com/result_double.html?hexadecimal=3FF199999999999A

丸めを停止するにはどうすればよいですか?

4

1 に答える 1

1

では、精度のdouble尺度は表示されません。代わりに次のようなものを使用する必要がありますBigDecimal。単に(new BigDecimal(doubleValue)).toString()あなたの意志を入力するだけresultです。ただし、Stringそこから得られる表現は、投稿した正確な値より1.10000000000000008881784197001252323389053344726562522余分な数字です。

編集:実際MathContext、コンストラクターのさまざまなタイプをいじっているとBigDecimal、投稿した正確な値(つまり、正確にその桁数の値)を取得できないため、その値がどのように計算されたかわかりません。

Your exact value        ->   1.10000000000000008881784197001
MathContext.DECIMAL64   ->   1.100000000000000
MathContext.DECIMAL128  ->   1.100000000000000088817841970012523
MathContext.UNLIMITED   ->   1.100000000000000088817841970012523233890533447265625
于 2013-08-26T17:50:14.373 に答える