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",

Reply via email to