longBitsToDouble,没有舍入,是可能的

时间:2013-08-26 16:55:19

标签: java android type-conversion

我有这段代码,“text”被强制为示例值

  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.10000000000000008881784197001

喜欢这个转换器 http://www.binaryconvert.com/result_double.html?hexadecimal=3FF199999999999A

我应该怎样做才能停止四舍五入?

1 个答案:

答案 0 :(得分:1)

double不会显示该精确度。您将不得不使用类似BigDecimal的内容。只需执行(new BigDecimal(doubleValue)).toString()填充result即可。但是,您从中获得的String代表是1.100000000000000088817841970012523233890533447265625,这是22个额外数字,而不是您发布的确切值。

编辑:事实上,为MathContext构造函数使用不同的BigDecimal类型,我无法获得您发布的确切值(即具有恰好多少位数的值)所以我不确定该值是多少算了。

Your exact value        ->   1.10000000000000008881784197001
MathContext.DECIMAL64   ->   1.100000000000000
MathContext.DECIMAL128  ->   1.100000000000000088817841970012523
MathContext.UNLIMITED   ->   1.100000000000000088817841970012523233890533447265625