Decimals numbers are a data type that aims to exactly represent
decimal numbers. Some programmers may not know, or fully realize,
that, in most programming languages, the numbers that you enter
look like decimal numbers but internally are represented
as binary—that is, base-2—floating-point numbers. Things that are
totally simple for us, such as 0.1
, simply cannot be
represented exactly in binary. The decimal data type—whatever
its stripe or flavor—aims to remedy this by giving us a way of
representing and working with decimal numbers, not binary
approximations thereof. (Wikipedia has
more.)
To help with my work on adding decimals to JavaScript, I've gone through a list of popular programming languages, taken from the 2022 StackOverflow developer survey. What follows is a brief summary of where these languages stand regarding decimals. The intention is to keep things simple. The purpose is:
There is no intention to filter out an language in particular; I'm
just working with a slice of languages found in in the StackOverflow
list linked to earlier. If a language does not have decimals, there
may well be multiple third-part decimal libraries. I'm not aware of
all libraries, so if I have linked to a minor
library and
neglect to link to a more high-profile one, please let me know. More
importantly, if I have misrepresented the basic fact of whether
decimals exists at all in a language,
send mail.
C does not have decimals. But they're working on it! The C23 standard (as in, 2023) standard proposes to add new fixed bit-width data types (32, 64, and 128) for these numbers.
C# has decimals in its underlying .NET subsystem. (For the same reason, decimals also exist in Visual Basic.)
C++ does not have decimals. But—like C—they're working on it!
Dart does not have decimals. But a third-party library exists.
Go does not have decimals, but a third-party library exists.
Java has decimals.
JavaScript does not have decimals. We're working on it!
Kotlin does not have decimals. But, in a way, it does: since Kotlin is running on the JVM, one can get decimals by using Java's built-in support.
PHP does not have decimals. An extension exists and at least one third-party library exists.
Python has decimals.
Ruby has decimals. Despite that, there is some third-party work to improve the built-in support.
Rust does not have decimals, but a crate exists.
SQL has decimals (it is the DECIMAL
data type). (Here
is the documentation for, e.g., PostgreSQL, and
here
is the documentation for MySQL.)
Swift has decimals
TypeScript does not have decimals. However, if decimals get added
to JavaScript (see above), TypeScript will probably
inherit
decimals, eventually.