▲ 742 ▼ Floating point arithmetics (eviltoast.org) submitted 1 year ago by orhtej2@eviltoast.org to c/programmer_humor@programming.dev 42 comments fedilink hide all child comments
[–] bamboo@lemmy.blahaj.zone 12 points 1 year ago (7 children) What's the right way to do money math without floats? permalink fedilink source parent hideshow 7 child comments replies: [–] orhtej2@eviltoast.org [S] 37 points 1 year ago (3 children) Fixed-point arithmetics permalink fedilink source parent hideshow 3 child comments replies: [–] felbane@lemmy.world 14 points 1 year ago Also known as "if you ain't storing cents, you ain't making sense." permalink fedilink source parent [–] KoalaUnknown@lemmy.world 11 points 1 year ago* (last edited 1 year ago) (1 child) 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. permalink fedilink source parent hideshow 1 child comment load more comments (1 reply) [–] SmoothLiquidation@lemmy.world 12 points 1 year 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. permalink fedilink source parent [–] jjjalljs@ttrpg.network 10 points 1 year 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') permalink fedilink source parent [–] JakenVeina@midwest.social 6 points 1 year ago* (last edited 1 year 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". permalink fedilink source parent
[–] orhtej2@eviltoast.org [S] 37 points 1 year ago (3 children) Fixed-point arithmetics permalink fedilink source parent hideshow 3 child comments replies: [–] felbane@lemmy.world 14 points 1 year ago Also known as "if you ain't storing cents, you ain't making sense." permalink fedilink source parent [–] KoalaUnknown@lemmy.world 11 points 1 year ago* (last edited 1 year ago) (1 child) 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. permalink fedilink source parent hideshow 1 child comment load more comments (1 reply)
[–] felbane@lemmy.world 14 points 1 year ago Also known as "if you ain't storing cents, you ain't making sense." permalink fedilink source parent
[–] KoalaUnknown@lemmy.world 11 points 1 year ago* (last edited 1 year ago) (1 child) 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. permalink fedilink source parent hideshow 1 child comment load more comments (1 reply)
[–] SmoothLiquidation@lemmy.world 12 points 1 year 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. permalink fedilink source parent
[–] jjjalljs@ttrpg.network 10 points 1 year 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') permalink fedilink source parent
[–] JakenVeina@midwest.social 6 points 1 year ago* (last edited 1 year 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". permalink fedilink source parent