this post was submitted on 25 Jun 2023
324 points (98.2% liked)

Programmer Humor

19171 readers
1831 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 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 19 points 1 year ago (7 children)

One of my lecturers mentioned a way they would get around this was to store all values as ints and then append a . two character before the final one.

[–] [email protected] 19 points 1 year ago (5 children)

Yeah, this works especially well for currencies (effectively doing all calculations in cents/pennies), as you do need perfect precision throughout the calculations, but the final results gets rounded to two-digit-precision anyways.

[–] [email protected] 0 points 1 year ago (4 children)

quite a horrible hack, most modern languages have decimal type that handles floating rounding. And if not, you should just use rounding functions to two digits with currency.

[–] [email protected] 25 points 1 year ago* (last edited 1 year ago) (1 children)

Not sure what financing applications you develop. But what you suggest wouldn't pass a code review in any financial-related project I saw.

Using integers for currency-related calculations and formatting the output is no dirty hack, it's industry standard because floating-point arithmetic is, on contemporary hardware, never precise (can't be, see https://en.wikipedia.org/wiki/IEEE_754 ) whereas integer arithmetic (or integers used to represent fixed-point arithmetic) always has the same level of precision across all the range it can represent. You typically don't want to round the numbers you work with, you need to round the result ;-) .

[–] [email protected] 7 points 1 year ago

Phew. Sometimes I read things and think I'm going crazy. I work in ERP/accounting software and was sure the monetary data type I've been using was backed by integers, but the post you're replying to had me second guessing myself...

load more comments (2 replies)
load more comments (2 replies)
load more comments (3 replies)