Remix.run Logo
ivanmontillam 8 hours ago

A string type. As parent says: it completely bypasses the problem. Save the numbers between double quotes and be done with it.

lxgr 5 hours ago | parent | next [-]

Except that now you have a new problem: Opinionated theorists that haven’t been part of a nasty “oh no, we accidentally considered some amounts as 10x/100x/1000x larger/smaller than expected” incident in their career yet…

portly 7 hours ago | parent | prev [-]

Storing numbers as arrays of u8? That doesn't make sense

ivanmontillam 6 hours ago | parent | next [-]

For JSON serialization, which doesn't support fixed-point precision it does.

Floating-point precision has too many gotchas for being suitable to store Decimal types, especially for the Currency use case.

notpushkin 6 hours ago | parent [-]

Surely it does:

  {
    "price": {
      "amount": 1000,
      "decimal_places": 2,
      "currency": "USD"
    }
  }
lxgr 6 hours ago | parent [-]

How is that better than {“amount”: “10.00”} (which also bypasses all potential floating point parsing issues that your or your counterparty’s JSON library might have)?

jameshart 5 hours ago | parent [-]

It is explicit about the fact that that number of decimal places is part of the data.

The semantics for your string “10.00” are complex - is it considered equal to “10”? To “10.000”? To “10.001”?

A user interacting with an API that uses such a string might make all sorts of assumptions about what it supports.

A user interacting with an API that has an explicit decimal places concept is being told ‘decimals matter! They can vary! Here be dragons!’

lxgr 4 hours ago | parent [-]

> The semantics for your string “10.00” are complex - is it considered equal to “10”?

Yes, but "10 USD" would be a non-canonical representation and you probably serialized incorrectly.

> To “10.000”?

Yes, but same caveat as above applies.

> To “10.001”?

Obviously not, and any system you'd ever want to use in a financial context will tell you so.

lxgr 6 hours ago | parent | prev [-]

It makes a lot of sense if you value correctness over performance.

microgpt 5 hours ago | parent [-]

Why not store them in unary then?

lxgr 5 hours ago | parent [-]

Unary is exactly as expressive as decimal or binary for integers, but somewhat less efficient, so why would you?

microgpt 4 hours ago | parent [-]

idk, why would you store integers as ASCII strings? It's somewhat less efficient.

lxgr 3 hours ago | parent [-]

Because it's much more explicit. Computers are fast, engineering is expensive. You usually never want to optimize prematurely when dealing with monetary amounts.