this post was submitted on 09 Oct 2025
733 points (99.3% liked)

Programmer Humor

26817 readers
2991 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] jjjalljs@ttrpg.network 27 points 1 day ago (1 children)

Yep. Open your browser's console and do .1 + .2 and you get 0.30000000000000004.

One of the reasons not to use floating point when working with money.

[–] bamboo@lemmy.blahaj.zone 12 points 1 day ago (4 children)

What's the right way to do money math without floats?

[–] orhtej2@eviltoast.org 35 points 1 day ago (2 children)
[–] KoalaUnknown@lemmy.world 11 points 1 day ago* (last edited 1 day ago) (1 children)

There is also Decimal floating-point arithmetic which has a larger range and better memory safety. Java, C#, Python, Ruby, etc. have built in support for it via Decimal.

[–] Cevilia@lemmy.blahaj.zone 4 points 22 hours ago

Banks and big companies have to worry about round-off and fractions of a penny, so Decimal is a better solution for them. But the great unwashed like you and me will never have to worry about that, so either works.

[–] felbane@lemmy.world 14 points 1 day ago

Also known as "if you ain't storing cents, you ain't making sense."

[–] SmoothLiquidation@lemmy.world 12 points 1 day ago

As other people mentioned, things like the decimal structure works well, but you can also just use an int to store how many pennies something costs and convert it to dollars for display.

[–] jjjalljs@ttrpg.network 10 points 1 day ago

Use a dedicated data type or library. Some languages also have something like python's Decimal type

>>> .1 + .2
0.30000000000000004
>>> Decimal(".1") + Decimal(".2")
Decimal('0.3')
[–] JakenVeina@midwest.social 6 points 1 day ago* (last edited 1 day ago)

The same IEEE spec that introduced base-2 floating point models was updated in 2008 to include some base-10 models that eliminate these issues. Many languages already support them natively, as well as most database engines. Otherwise, you can probably find third-party-library support.

If you don't have access to an IEEE decimal implementation, or if you just wanna be a rulebreaker, the common strategy is to just store only plain integers, and the precision level you want. So, say, if you're just dealing with simple american dollars, you'd just make sure to always interpret the integer value as "cents". If you need more precision than that, you might do "millicents".