mirror of
https://gitee.com/dromara/hutool.git
synced 2026-02-09 09:16:26 +08:00
NumberUtil
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user