NumberUtil

This commit is contained in:
Looly
2025-12-09 15:38:51 +08:00
parent 7cda4c6a27
commit 297d790f45
3 changed files with 27 additions and 8 deletions

View File

@@ -1,12 +1,13 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.8.43(2025-12-01)
# 5.8.43(2025-12-09)
### 🐣新特性
* 【core 】 `ColorUtil`颜色名称DARKGOLD、LIGHTGOLD新增蛇形命名匹配pr#1400@Github
### 🐞Bug修复
* 【core 】 修复`Calculator.conversion(String expression)`方法计算包含科学计数法表达式的值时逻辑有误结果不符合预期pr#4172@Github
* 【core 】 修复`Calculator.conversion`方法计算包含科学计数法表达式的值时逻辑有误结果不符合预期pr#4172@Github
* 【core 】 修复`NumberUtil.getBinaryStr`方法计算Double等丢失小数问题pr#1411@Gitee
-------------------------------------------------------------------------------------------------------------
# 5.8.42(2025-11-28)

View File

@@ -1697,11 +1697,17 @@ public class NumberUtil {
/**
* 获得数字对应的二进制字符串
* <ul>
* <li>Integer/Long直接使用 JDK 内置方法转换</li>
* <li>Byte/Short转换为无符号整数后补充前导零至对应位数Byte=8位Short=16位</li>
* <li>Float/Double使用 IEEE 754 标准格式转换Float=32位Double=64位</li>
* </ul>
*
* @param number 数字
* @return 二进制字符串
*/
public static String getBinaryStr(Number number) {
Assert.notNull(number, "Number must be not null!");
if (number instanceof Double) {
// 处理double类型
@@ -1711,16 +1717,21 @@ public class NumberUtil {
// 处理float类型
int bits = Float.floatToIntBits((Float) number);
return String.format("%32s", Integer.toBinaryString(bits)).replace(' ', '0');
}
if (number instanceof Long) {
}else if (number instanceof Long) {
return Long.toBinaryString((Long) number);
} else if (number instanceof Integer) {
return Integer.toBinaryString((Integer) number);
} else if (number instanceof Byte) {
// Byte是8位补前导0至8位
return String.format("%8s", Integer.toBinaryString(number.byteValue() & 0xFF)).replace(' ', '0');
} else if (number instanceof Short) {
// Short是16位补前导0至16位
return String.format("%16s", Integer.toBinaryString(number.shortValue() & 0xFFFF)).replace(' ', '0');
} else if (number instanceof BigInteger) {
// 大数整数类型
return ((BigInteger) number).toString(2);
} else {
System.out.println(number.getClass().getName());
return Long.toBinaryString(number.longValue());
}
}

View File

@@ -621,7 +621,7 @@ public class NumberUtilTest {
assertTrue(NumberUtil.isPrimes(2147483647));
assertFalse(NumberUtil.isPrimes(2147483646));
}
@Test
public void range(){
assertFalse(NumberUtil.isIn(new BigDecimal("1"),new BigDecimal("2"),new BigDecimal("12")));
@@ -704,4 +704,11 @@ public class NumberUtilTest {
final boolean equals = NumberUtil.equals(104557543L, 104557544);
assertFalse(equals);
}
@Test
public void testGetFloatBinaryStr() {
// 获取浮点数的 IEEE 754 原始比特位字符串
final String result = NumberUtil.getBinaryStr(3.5);
assertEquals("0100000000001100000000000000000000000000000000000000000000000000", result);
}
}