diff --git a/core-java-modules/core-java-numbers-7/pom.xml b/core-java-modules/core-java-numbers-7/pom.xml
new file mode 100644
index 0000000000..dec3084108
--- /dev/null
+++ b/core-java-modules/core-java-numbers-7/pom.xml
@@ -0,0 +1,37 @@
+
+ 4.0.0
+ core-java-numbers-7
+ core-java-numbers-7
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+ test
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+ core-java-numbers-7
+
+
+ src/main/resources
+ true
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/doubleisint/CheckDoubleIsAnIntegerUnitTest.java b/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/doubleisint/CheckDoubleIsAnIntegerUnitTest.java
new file mode 100644
index 0000000000..90d2c52595
--- /dev/null
+++ b/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/doubleisint/CheckDoubleIsAnIntegerUnitTest.java
@@ -0,0 +1,83 @@
+package com.baeldung.doubleisint;
+
+import com.google.common.math.DoubleMath;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class CheckDoubleIsAnIntegerUnitTest {
+
+ boolean notNaNOrInfinity(double d) {
+ return !(Double.isNaN(d) || Double.isInfinite(d));
+ }
+
+ @Test
+ void whenConvertingToInt_thenGetExpectedResult() {
+ double d1 = 42.0D;
+ boolean d1IsInteger = notNaNOrInfinity(d1) && (int) d1 == d1;
+ assertTrue(d1IsInteger);
+
+ double d2 = 42.42D;
+ boolean d2IsInteger = notNaNOrInfinity(d2) && (int) d2 == d2;
+ assertFalse(d2IsInteger);
+
+ double d3 = 2.0D * Integer.MAX_VALUE;
+ boolean d3IsInteger = notNaNOrInfinity(d3) && (int) d3 == d3;
+ assertTrue(!d3IsInteger); // <-- fails if exceeding Integer's range
+ }
+
+ @Test
+ void whenUsingModuloOperator_thenGetExpectedResult() {
+ double d1 = 42.0D;
+ boolean d1IsInteger = notNaNOrInfinity(d1) && (d1 % 1) == 0;
+ assertTrue(d1IsInteger);
+
+ double d2 = 42.42D;
+ boolean d2IsInteger = notNaNOrInfinity(d2) && (d2 % 1) == 0;
+ assertFalse(d2IsInteger);
+
+ double d3 = 2.0D * Integer.MAX_VALUE;
+ boolean d3IsInteger = notNaNOrInfinity(d3) && (d3 % 1) == 0;
+ assertTrue(d3IsInteger);
+
+ }
+
+
+ @Test
+ void whenCheckingFloorOrCeilingValue_thenGetExpectedResult() {
+ double d1 = 42.0D;
+ boolean d1IsInteger = notNaNOrInfinity(d1) && Math.floor(d1) == d1;
+ assertTrue(d1IsInteger);
+
+ double d2 = 42.42D;
+ boolean d2IsInteger = notNaNOrInfinity(d2) && Math.floor(d2) == d2;
+ assertFalse(d2IsInteger);
+
+ double d3 = 2.0D * Integer.MAX_VALUE;
+ boolean d3IsInteger = notNaNOrInfinity(d3) && Math.floor(d3) == d3;
+ assertTrue(d3IsInteger);
+
+ }
+
+ @Test
+ void whenUsingGuava_thenGetExpectedResult() {
+ double d1 = 42.0D;
+ boolean d1IsInteger = DoubleMath.isMathematicalInteger(d1);
+ assertTrue(d1IsInteger);
+
+ double d2 = 42.42D;
+ boolean d2IsInteger = DoubleMath.isMathematicalInteger(d2);
+ assertFalse(d2IsInteger);
+
+ double d3 = 2.0D * Integer.MAX_VALUE;
+ boolean d3IsInteger = DoubleMath.isMathematicalInteger(d3);
+ assertTrue(d3IsInteger);
+
+ boolean isInfinityInt = DoubleMath.isMathematicalInteger(Double.POSITIVE_INFINITY);
+ assertFalse(isInfinityInt);
+
+ boolean isNanInt = DoubleMath.isMathematicalInteger(Double.NaN);
+ assertFalse(isNanInt);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index b3ef8167a5..c0c44eba9a 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -166,6 +166,7 @@
core-java-numbers-4
core-java-numbers-5
core-java-numbers-6
+ core-java-numbers-7
core-java-optional
core-java-perf
core-java-properties
@@ -225,5 +226,4 @@
-