gpt4 book ai didi

java - longBitsToDouble,不进行舍入,是否可以

转载 作者:行者123 更新时间:2023-12-01 14:12:00 25 4
gpt4 key购买 nike

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

  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

我应该怎么做才能停止舍入?

最佳答案

double 不会显示该精度度量。您将不得不使用诸如 BigDecimal 之类的东西来代替。只需执行 (new BigDecimal(doubleValue)).toString() 来填充您的 结果 即可。但是,您从中获得的 String 表示形式是 1.100000000000000088817841970012523233890533447265625,这比您发布的确切值多了 22 位。

编辑:实际上,在 BigDecimal 构造函数中使用不同的 MathContext 类型,我无法获得您发布的确切值(即具有那么多位数的值),所以我不确定该值是如何计算的。

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

关于java - longBitsToDouble,不进行舍入,是否可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com