gpt4 book ai didi

java - 从 String 创建一个 BigInteger 并向其填充 "0"

转载 作者:行者123 更新时间:2023-12-02 10:09:55 24 4
gpt4 key购买 nike

[InputParam1:Decimal Number in String format(for Eg:30),
InputParam2:Integer to denote number of repeating 0's to append(for Eg:6)]

要将数字从十进制转换为二进制并将数字填充到其前面,我需要执行以下步骤:

第 1 步: BigInteger binary=new BigInteger(InputParam1,2);--> 当我定义一个基数为 16 的 BigInt 时(我刚刚在基数 2 失败时尝试过)而不是像上面那样定义基数为 2 的 BigInt 时,这有效。它抛出一个数字格式异常。

第 2 步: String pad=StringUtils.repeat("0",InputParam2);(重复 0 'InputParam2' 次数)-->这很好用

第3步:需要在二进制文件前面添加pad(来自第1步)对于 BigInteger,我无法获得类似于 .append 的内容。所以我试图 a) 将此 BigInteger 数字转换为 String 并 b) 追加填充 c) 转换回 BigInteger (如果不创建新的 BigInteger,我无法完成此步骤)

有关第 1 步和第 3-c 步的任何指示都会有所帮助。

最佳答案

#1 - 您还没有说明要在 InputParam1 中传递什么值,但我猜测您传递的不是“1”中仅包含“0”的字符串' 人物。构造函数的“radix”参数告诉代码如何解释您提供的字符串。这对我来说效果很好:

BigInteger binary=new BigInteger("1000",2);
System.out.println(binary);

如何构建数字与您最终想要如何表示或显示该数字无关。这里的关键思想是数字的表示形式(十六进制、十进制、二进制)与数字本身无关,就像前导零不会影响数字的值一样。二进制 1111、十六进制 f 和十进制 15 都是相同的数字。如果您将其中三个分别以 21610 为基数传递到 BigDecimal 的构造函数中,则最终将得到完全相同的结果每种情况都是一样的。该对象将失去您用于将其设置为其初始值的表示形式的任何概念。

#3 - 不存在前面有零填充的数字(int、BigInteger 等)的概念,就像不知道可以使用哪个基数/基数来直观地表示数字一样。您可以从概念上考虑它,但这只是显示数字的一种方式。与数字本身无关。

我以前没有尝试过,但似乎没有 super 简单的方法可以在 Java 中用前导 0 格式化二进制值,就像十进制和十六进制一样,因为 String.format() 没有给出格式二进制说明符。根据此 StackOverflow 帖子 How to get 0-padded binary representation of an integer in java? ,这似乎是最好的方法,已将最受接受的答案转换为与 BigInteger 一起使用:

String str = String.format("%16s", binary.toString(2)).replace(' ', '0');

这是我的所有示例代码,以及输出:

BigInteger binary=new BigInteger("1000",2);
System.out.println(binary);
String str = String.format("%16s", binary.toString(2)).replace(' ', '0');
System.out.println(str);

输出:

8
0000000000001000

关于java - 从 String 创建一个 BigInteger 并向其填充 "0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55071235/

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