当前位置: 首页 > 知识库问答 >
问题:

如何仅将BigDecimal的整数部分转换为十六进制字符串?

相温文
2023-03-14

我有许多BigDecimal类型,例如18446744073709551616,我想将其转换为十六进制值。我可以截断小数部分。

有没有办法代替手动操作?

共有3个答案

晁璞
2023-03-14

理论上,可以将BigDecimal表示为十六进制字符串,类似于Double。toHexString

0x1.199999999999p+1

但是AFAIK没有标准的方法来做到这一点,定制实施也不容易

高朝明
2023-03-14

考虑到将十进制值转换为十六进制需要指数。您可以使用格式化程序获取表示数值的十六进制字符串。

%A:结果被格式化为十六进制浮点数,具有意义和指数
%X:结果被格式化为十六进制整数

如果要转换十进制值,请使用%A转换:

System.out.println(String.format("%A", myBigDecimal));

奇怪的是,上面关于Forcat的javadoc的代码是正确的,但是javadoc中似乎有一个相关的9年前的错误,该错误已在几周前的Java8:5035569中得到修复:(fmt)BigDecimal和%a的Forcat中的断言错误。您可以使用下面的模拟代码:

System.out.println(String.format("%A", myBigDecimal.doubleValue()));

EDIT
根据帖子中的值判断,您并不真正关心小数部分。您可以在模式中使用%X转换,只需提供BigIntger表示:

BigDecimal bd = new BigDecimal("18446744073709551616");
System.out.println(String.format("%X", bd.toBigInteger()));
李胡媚
2023-03-14

根据您的示例判断,您应该使用BigInteger而不是BigDecimal。这样你就可以

new BigInteger("18446744073709551616").toString(16)

如果不能更改原始对象的类型,请稍后在方法中将其转换为BigInteger

new BigDecimal("18446744073709551616").toBigInteger().toString(16);
 类似资料:
  • 问题内容: 我写了一些代码将十六进制显示字符串转换为十进制整数。但是,当输入类似100a或625b(带有字母的东西)时,我得到了这样的错误: java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(未知源)处的java.lang.NumberFormatException.forInputString(未知源)处为“ 1

  • 我正在写一个Rust程序,读取I2C总线并保存数据。当我读取I2C总线时,我会得到十六进制值,比如,,等等。 现在,我只能将其作为字符串处理并按原样保存。有没有办法把它解析成一个整数?它有内置的功能吗?

  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:

  • 问题内容: 我编写了一个简单的程序,用于在Java中向串行端口发送和接收数据。我通过回送测试(Rx到Tx)连接串行端口设备。它工作正常。但我无法发送和接收十六进制数据到串行端口和接收串行端口。在我的设备中使用了FT232BL芯片,因此是否需要任何dll或其他库来将十六进制数据发送和接收到串行端口设备。我的代码如下。 问题答案: 十六进制: 十六进制为:

  • 我有十六进制字符串,例如“0x103E”,我想将其转换为整数。意思是to我尝试了但它给出了数字格式异常。我如何实现这一点?

  • 问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在: