This is an automated email from the ASF dual-hosted git repository.
garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-beanutils.git
The following commit(s) were added to refs/heads/master by this push:
new cab94f1d Preserve float and double magnitude when converting to
BigInteger (#438)
cab94f1d is described below
commit cab94f1d221324de0698dfb990f087e1b852cb7c
Author: Naveed Khan <[email protected]>
AuthorDate: Tue Sep 1 21:53:12 2026 +0000
Preserve float and double magnitude when converting to BigInteger (#438)
---
.../apache/commons/beanutils2/converters/NumberConverter.java | 3 +++
.../commons/beanutils2/converters/BigIntegerConverterTest.java | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git
a/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
b/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
index 7928cb0d..04f5b14f 100644
---
a/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
+++
b/src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java
@@ -493,6 +493,9 @@ public abstract class NumberConverter<N extends Number>
extends AbstractConverte
if (value instanceof BigDecimal) {
return targetType.cast(((BigDecimal) value).toBigInteger());
}
+ if (value instanceof Float || value instanceof Double) {
+ return targetType.cast(new
BigDecimal(value.toString()).toBigInteger());
+ }
return targetType.cast(BigInteger.valueOf(value.longValue()));
}
diff --git
a/src/test/java/org/apache/commons/beanutils2/converters/BigIntegerConverterTest.java
b/src/test/java/org/apache/commons/beanutils2/converters/BigIntegerConverterTest.java
index 0f266c1c..f56ef066 100644
---
a/src/test/java/org/apache/commons/beanutils2/converters/BigIntegerConverterTest.java
+++
b/src/test/java/org/apache/commons/beanutils2/converters/BigIntegerConverterTest.java
@@ -19,6 +19,7 @@ package org.apache.commons.beanutils2.converters;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import java.math.BigDecimal;
import java.math.BigInteger;
import org.apache.commons.beanutils2.Converter;
@@ -62,6 +63,15 @@ class BigIntegerConverterTest extends
AbstractNumberConverterTest<BigInteger> {
converter = null;
}
+ @Test
+ void testLargeFloatingPointMagnitude() {
+ // A Float or Double beyond long range must keep its magnitude instead
of saturating to Long.MAX_VALUE.
+ final Double bigDouble = Double.valueOf(1.0e30);
+ assertEquals(new BigDecimal(bigDouble.toString()).toBigInteger(),
converter.convert(BigInteger.class, bigDouble));
+ final Float bigFloat = Float.valueOf(1.0e20f);
+ assertEquals(new BigDecimal(bigFloat.toString()).toBigInteger(),
converter.convert(BigInteger.class, bigFloat));
+ }
+
@Test
void testSimpleConversion() throws Exception {
final String[] message = { "from String", "from String", "from
String", "from String", "from String", "from String", "from String", "from
Byte",