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
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.

Discussions

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
How does serialization performance compare between `long` and `double` in Java? - TestMu AI Community
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? Also, does checking if a value is integer impact ... More on community.testmuai.com
🌐 community.testmuai.com
0
April 1, 2025
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
Which is larger? Long vs Double
Please ensure that: Your code is properly formatted as code block - see the sidebar (About on mobile) for instructions You include any and all error messages in full You ask clear questions You demonstrate effort in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions. Trying to solve problems on your own is a very important skill. Also, see Learn to help yourself in the sidebar If any of the above points is not met, your post can and will be removed without further warning. Code is to be formatted as code block (old reddit: empty line before the code, each code line indented by 4 spaces, new reddit: https://i.imgur.com/EJ7tqek.png ) or linked via an external code hoster, like pastebin.com, github gist, github, bitbucket, gitlab, etc. Please, do not use triple backticks (```) as they will only render properly on new reddit, not on old reddit. Code blocks look like this: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } You do not need to repost unless your post has been removed by a moderator. Just use the edit function of reddit to make sure your post complies with the above. If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures. To potential helpers Please, do not help if any of the above points are not met, rather report the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice. I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns. More on reddit.com
🌐 r/javahelp
10
3
January 19, 2023
🌐
W3Schools
w3schools.com › java › java_data_types.asp
Java Data Types
assert abstract boolean break byte case catch char class continue default do double else enum exports extends final finally float for if implements import instanceof int interface long module native new package private protected public return requires short static super switch synchronized this throw throws transient try var void volatile while Java String Methods
🌐
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 ...
🌐
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.
🌐
Sololearn
sololearn.com › en › Discuss › 2059751 › what-s-the-difference-between-float-double-and-long-variables
What's the difference between float , double and long variables? | Sololearn: Learn to code for FREE!
November 5, 2019 - Long is similar to int but has ... values but with lower precision. But double on the other hand has 8 bytes of storage and can as well store decimal point values with higher precision....
🌐
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...
Find elsewhere
🌐
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.
🌐
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?
–Dell Technologies & Intel® · Infrastructure for Machine Learning, AI Requirements, Examples –TechTarget · The key difference between a float and double in Java is that a double can represent much larger numbers than a float.
🌐
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?
🌐
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.
🌐
GeeksforGeeks
geeksforgeeks.org › java › java-data-types
Java Data Types - GeeksforGeeks
It is recommended to go through rounding off errors in java. ... public class Geeks { public static void main(String[] args) { double pi = 3.141592653589793; double avogadro = 6.02214076e23; System.out.println("Pi: " + pi); System.out.println("Avogadro's Number: " + avogadro); } }
Published   January 16, 2026
🌐
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...
Top answer
1 of 4
7

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.

🌐
Quora
quora.com › Why-does-Java-use-double-for-floating-point-numbers-instead-of-long-for-scientific-calculations
Why does Java use double for floating point numbers instead of long for scientific calculations? - Quora
Answer: Usage of floating point arithmetics in scientific calculations is not related to Java. Floating points are able to represent real number with varying precision for different magnitudes: number with smaller magnitudes are represented with higher precision and numbers with large magnitudes...
🌐
Swan
pyweb.swan.ac.uk › ~allton › VisualBasic › node9.html
9. Declaring your Variable Types: Long, Double and String, ...
Long is for integer numbers. Double is for real numbers (i.e. numbers which have decimal points in them!).
🌐
Quora
quora.com › What-is-the-difference-between-float-double-and-long-double-in-the-programming-language-C
What is the difference between float, double and long double in the programming language C? - Quora
Answer (1 of 2): The main difference is the amount of storage allocated. Generally you need more storage for a double than a float, and more for a long double and a double. How much this allocated storage is, is implementation dependent.
🌐
iO Flood
ioflood.com › blog › java-long
The Long Data Type in Java: A Detailed How-To Guide
February 26, 2024 - In this code, we declare an int variable num1 and a long variable num2. We then print their values, which outputs 2000000000 and 3000000000, respectively. The float and double data types are used to store floating-point numbers, i.e., numbers with decimal points.
🌐
Scaler
scaler.com › home › topics › float vs double in java - difference you should know
Float Vs Double in Java - Difference You Should Know - Scaler Topics
March 27, 2024 - Double is a 64-bit floating-point number, which means that it can store up to 15 decimal digits accurately. The float keyword in Java is a primitive data type, and its size limit is 4 byte or 32 bits (1 byte = 8 bits) single-precision IEEE 754 ...