double is made of 1 bit sign 52 bit mantissa and 11 bit exponent and long is made of 1 bit sign and 63 bit number. So double can have larger values, and they both take 64 bits in your memory. So double has the precision of at most 16 digits and long of at most 19 digits. (Also, a double can have a value of Infinity) If you're looking for an object that can store very large numbers, use BigInteger or BigDecimal, their value is only limited by how much memory your computer has and they can do precise math. Answer from Chemical-Asparagus58 on reddit.com
🌐
Reddit
reddit.com › r/javahelp › which is larger? long vs double
r/javahelp on Reddit: Which is larger? Long vs Double
January 19, 2023 -

I’ve tried looking for definitive answers but the only difference I see seems to be based on the precision of the numbers?

Which data type is larger and which one is smaller?

Discussions

performance - double vs long serialization in java - Stack Overflow
I can store a number as a Long and Double in HBase. Both of them takes 8 bytes in Java. Advantage of Using Double is that it gives a more wider range for storing Whole Numbers. However, i think r... More on stackoverflow.com
🌐 stackoverflow.com
What the difference between double and long data types
I assume they are both floating point numbers?, but would like to know the capacities of each. More on community-forums.domo.com
🌐 community-forums.domo.com
August 11, 2016
java - Confused with size of long and double - Stack Overflow
Looking at Java (but probably similar or the same in other languages), a long and a double both use 8 bytes to store a value. A long uses 8 bytes to store long integers from -9,223,372,036,854,775... More on stackoverflow.com
🌐 stackoverflow.com
numbers - Confusing long vs double behavior in Java - Stack Overflow
So the question is if both double and long are 64-bit numbers in Java, then why does type-casting to double gives a better result? More on stackoverflow.com
🌐 stackoverflow.com
April 26, 2017
🌐
Pediaa
pediaa.com › home › technology › it › programming › what is the difference between long and double in java
What is the Difference Between long and double in Java - Pediaa.Com
May 30, 2019 - The main difference between long ... double prevision 64 bit IEEE 754 floating point. In brief, long is an integral type whereas double is a floating point type. 1.Java Data Types, Available here....
🌐
RETIT
retit.de › performance-in-detail-long-vs-double-in-java-2
Performance in Detail: Long vs. Double in Java – RETIT
May 8, 2018 - So why would the version using Doubles lead to a higher memory consumption? Now, the devil is in the details. Of course, a List in Java does not handle primitive types but only their wrapper classes. But still, even when looking at the boxed types Long and Double, the only attribute in both classes is the wrapped primitive, so Double objects should consume the same amount of memory as Long objects.
Top answer
1 of 3
26

If you are storing integers, use Long. Your statement that "Advantage of Using Double is that it gives a more wider range for storing Whole Numbers" is incorrect. Both are 64 bits long, but double has to use some bits for the exponent, leaving fewer bits to represent the magnitude. You can store larger numbers in a double but you will lose precision.

In other words, for numbers larger than some upper bound you can no longer store adjacent "whole numbers"... given an integer value above this threshold, the "next" possible double will be more than 1 greater than the previous number.

For example

public class Test1  
{

    public static void main(String[] args) throws Exception 
    {
        long   long1 = Long.MAX_VALUE - 100L;
        double dbl1  = long1;
        long   long2 = long1+1;
        double dbl2  = dbl1+1;
        double dbl3  = dbl2+Math.ulp(dbl2);

        System.out.printf("%d %d\n%f %f %f", long1, long2, dbl1, dbl2, dbl3);
    }

}

This outputs:

9223372036854775707 9223372036854775708
9223372036854776000.000000 9223372036854776000.000000 9223372036854778000.000000

Note that

  1. The double representation of Long.MAX_VALUE-100 does NOT equal the original value
  2. Adding 1 to the double representation of Long.MAX_VALUE-100 has no effect
  3. At this magnitude, the difference between one double and the next possible double value is 2000.

Another way of saying this is that long has just under 19 digits precision, while double has only 16 digits precision. Double can store numbers larger than 16 digits, but at the cost of truncation/rounding in the low-order digits.

If you need more than 19 digits precision you must resort to BigInteger, with the expected decrease in performance.

2 of 3
3

This looks like the wrong battle:

From the Java Tutorial

The long data type is a 64-bit signed two's complement integer. It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive).

That's pretty close to 19 significant digits

From Wikipedia

This gives from 15 - 17 significant decimal digits precision.

So, despite its apparent "superiority" Double will serve you worse than Long. And I'm merely guessing here, but intuitively I'd say serialization/deserialization of floating point types are costlier operations than the same operations on integral data types, but even if there are differences they will be quite small on modern systems.

So, when working with integers, stick to Long.

🌐
Quora
quora.com › What-is-the-difference-between-an-int-a-long-a-double-and-a-decimal-in-Java
What is the difference between an int, a long, a double and a decimal in Java? - Quora
Answer (1 of 5): There are eight primitive datatypes supported by Java. Primitive datatypes are predefined by the language and named by a keyword. int * Int data type is a 32-bit signed two's complement integer. * Minimum value is - 2,147,483,648 (-2^31) * Maximum value is 2,147,483,647(incl...
🌐
Oracle
docs.oracle.com › javase › tutorial › java › nutsandbolts › datatypes.html
Primitive Data Types (The Java™ Tutorials > Learning the Java Language > Language Basics)
The Long class also contains methods ... unsigned long. float: The float data type is a single-precision 32-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in the Floating-Point Types, Formats, and Values section of the Java Language Specification. As with the recommendations for byte and short, use a float (instead of double) if you need ...
Find elsewhere
🌐
Coderanch
coderanch.com › t › 328469 › java › comparision-double-long
comparision between double and long (Java in General forum at Coderanch)
July 21, 2006 - Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor) ... 123456789.00000001 == 123456789.0" should return true. But I want them as false 123456789.00000001 == 123456789.0000000 should return me false. How do I do that? Rizwan SCJA, SCJP, SCWCD, SCBCD, SCDJWS. ... If you remove string and give numbers as double instead of string it says equal(compare method returns 0) BigDecimal bd1 = new BigDecimal(1234567891.00000001); BigDecimal bd2 = new BigDecimal(1234567891); bd1.compareTo(bd2) returns 0.
🌐
Domo
community-forums.domo.com › home › community forums › archive
What the difference between double and long data types - Domo Community Forum
August 11, 2016 - I assume they are both floating point numbers?, but would like to know the capacities of each.
🌐
Oracle
docs.oracle.com › javase › 8 › docs › api › java › lang › Double.html
Double (Java Platform SE 8 )
April 21, 2026 - In all cases, the result is a long integer that, when given to the longBitsToDouble(long) method, will produce a floating-point value the same as the argument to doubleToLongBits (except all NaN values are collapsed to a single "canonical" NaN value).
🌐
Quora
quora.com › What-is-the-difference-between-double-long-float-and-int-variables-in-Java-Which-one-should-be-used-for-storing-large-numbers-more-than-two-digits-Why
What is the difference between double, long, float, and int variables in Java? Which one should be used for storing large numbers (more than two digits)? Why? - Quora
Answer: In Java, int and long are primitive integer datatypes. They store integers as two‘s complement numbers. Ints use 32 bits and have a range from -2^{31}=-2147483648 to 2^{31}-1=2147483647, longs use 64 bits and have a range from -2^{63}=-9223372036854775808 to 2^{63}-1=9223372036854775807.
🌐
Sololearn
sololearn.com › en › Discuss › 2059751 › whats-the-difference-between-float-double-and-long-variables
What's the difference between float , double and long ...
November 5, 2019 - Sololearn is the world's largest community of people learning to code. With over 25 programming courses, choose from thousands of topics to learn how to code, brush up your programming knowledge, upskill your technical ability, or stay informed about the latest trends.
Top answer
1 of 4
6

The absolute quantity of information that you can store in 64 bit is of course the same.

What changes is the meaning you assign to the bits.

In an integer or long variable, the codification used is the same you use for decimal numbers in your normal life, with the exception of the fact that number two complement is used, but this doesn't change that much, since it's only a trick to gain an additional number (while storing just one zero instead that a positive and a negative).

In a float or double variable, bits are split in two kinds: the mantissa and the exponent. This means that every double number is shaped like XXXXYYYYY where it's numerical value is something like XXXX*2^YYYY. Basically you decide to encode them in a different way, what you obtain is that you have the same amount of values but they are distribuited in a different way over the whole set of real numbers.

The fact that the largest/smallest value of a floating number is larger/smaller of the largest/smalles value of a integer number doesn't imply anything on the amount of data effectively stored.

2 of 4
2

A double can store a larger number by having larger intervals between the numbers it can store, essentially. Not every integer in the range of a double is representable by that double.

More specifically, a double has one bit (S) to store sign, 11 bits to store an exponent E, and 52 bits of precision, in what is called the mantissa (M).

For most numbers (There are some special cases), a double stores the number (-1)^S * (1 + (M * 2^{-52})) * 2^{E - 1023}, and as such, when E is large, changing M by one will make a much larger change in the size of the resulting number than one. These large gaps are what give doubles a larger range than longs.

🌐
Coderanch
coderanch.com › t › 689430 › java › primitive-long-double-compatibility
primitive long and double compatibility (Beginning Java forum at Coderanch)
January 10, 2018 - If you go back to the JLS link ... there are more values between the largest and the smallest. A double and a long each occupy 64 bits, and the long can exactly define every whole number in its range. But the double has a much larger range, so it must miss out some values. ...
🌐
Compsci
compsci.ca › v3 › viewtopic.php
long long vs double?
Computer Science Canada is a community for programmers and students to come and share there knowledge various subjects. We also have many tutorials and tips covering numerous languages and areas of programming.
🌐
TestMu AI Community
community.testmuai.com › ask a question
How does serialization performance compare between `long` and `double` in Java? - TestMu AI Community
April 1, 2025 - Both long and double take 8 bytes in Java, and while double offers a wider range for storing whole numbers, long might still be sufficient for many use cases. How does java long vs double serialization and deserialization performance compare?
🌐
TheServerSide
theserverside.com › blog › Coffee-Talk-Java-News-Stories-and-Opinions › Float-vs-Double-Whats-the-difference
Java double vs float: What's the difference?
The key difference between a float and double in Java is that a double can represent much larger numbers than a float. Both data types represent numbers with decimals, but a float is 32 bits in size while a double is 64 bits.
🌐
Quora
quora.com › What-is-the-difference-between-using-double-for-floating-point-numbers-in-Java-as-opposed-to-using-float-or-long-in-C-C
What is the difference between using double for floating point numbers in Java as opposed to using float or long in C/C++? - Quora
Answer (1 of 2): Disclaimer: I am not a Java expert Question is sort of confusing. A long is an integral type, so I think we can ignore that part of the question. Computer languages provide some level of abstraction over the CPU. But that doesn’t mean they abandon the capabilities of the CPU an...