gpt4 book ai didi

java - 试图将 double 字转换为十进制

转载 作者:行者123 更新时间:2023-11-30 09:36:15 25 4
gpt4 key购买 nike

我正在尝试将 double 转换为十进制数。 例如, double 字 22 和字节为:

[0] 0
[1] 0
[2] 0
[3] 0
[4] 0
[5] 0
[6] 54
[7] 64

现在我再次尝试将这些值转换为 22:

  ByteBuffer buffer = ByteBuffer.wrap(data);
long l = buffer.getLong();
long b = Double.doubleToLongBits(l);

但结果是完全错误的:4.6688606E18这个号码是多少?请帮忙,我完全糊涂了!

根据 IEEE 标准 754 的 double :

任何存储为 double 的值都需要 64 位,格式如下表所示:

63符号(0 = 正,1 = 负)

62 到 52指数,偏置 1023

51 比 0数字 1.f 的分数 f

现在我应该如何将 double 转换为数字以再次获得 22?所有这些答案都是错误的

最佳答案

我不确定确切地您正在尝试进行哪种类型的转换(当您说“转换为十进制”时,您想要的输出格式/类是什么?)

然而,我读标题的第一个想法是 BigDecimal将是一个有效的代表。因此,第一种方法是执行如下操作:

double d = ...; // your input number
BigDecimal b = new BigDecimal(d);

就是说,如果您想转换为十进制,那可能是因为 d 的值存在 float ponit/舍入问题,仍将出现在 BigDecimal 中基于 d 构造的表示.

解决此问题的最佳方法是使用 BigDecimals从一开始,使用他们的 String构造函数 - 因此不会有任何浮点舍入实例。如果出于某种原因这不是一个选项,您可以转换 double以这样一种方式添加到一个字符串中,它将解决许多浮点舍入问题:

String strRep = Double.toString(d);
BigDecimal b = new BigDecimal(strRep);

关于java - 试图将 double 字转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849721/

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