For everyday bookkeeping usage in most businesses, the smallest unit available is the cent. The software that we use literally will not accept anything else. But if you’re a bank keeping track of interest, you go down to a lower level of precision, and only present the figures that have been run through a floor function with significance one cent.
I’ve never seen amortization schedules with amounts less than a cent; the difference is made up in the last payment. That doesn’t mean, however, that when banks decide how much interest to pay out or charge when payments have not already been agreed upon to a perfect schedule that they simply round - they keep track as necessary.
One place similar to a bank that I invest with is Prosper, and it’s quite important there since they’re dealing with loans sliced into $25 pieces that they need to be paid on all separately, and the fee they charge per payment is on the order of 2 cents, but needs to scale based on the loan balance remaining. While everything is usually displayed down to the cent, on the account transactions page they offer the ability to hover over amounts and see exactly what the payment or fee was down to 4 decimal places past the cent.
For values where the integer value is representable within the number of bits in the mantissa (53), the values are exact. But there is a point where you run out of precision. It is your problem to manage this. The language helpfully provides a constant: Number.MAX_SAFE_INTEGER is the largest integer you can use and rely on the language preserving the value. Nothing in the language or runtime will check if you ever run over this value at any time. 53 bits might seem a lot, but it isn’t that hard to find yourself needing to manage integers larger than this.