Floating-point precision has too many gotchas for being suitable to store Decimal types, especially for the Currency use case.
{ "price": { "amount": 1000, "decimal_places": 2, "currency": "USD" } }
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!’