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

就像在这个转换器 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 回答