Infelizmente, todas as respostas até agora ignoram o fato de que nem todas as moedas têm 100 subunidades (por exemplo, o centavo é a subunidade do dólar dos EUA (USD)). Moedas como o Dinar Iraquiano (IQD) possuem 1000 subunidades: um Dinar Iraquiano possui 1000 fils. O iene japonês (JPY) não possui subunidades. Portanto, "multiplique por 100 para fazer aritmética inteira" nem sempre é a resposta correta.
Além disso, para cálculos monetários, você também precisa acompanhar a moeda. Você não pode adicionar um dólar americano (USD) a uma rúpia indiana (INR) (sem antes converter um para o outro).
Também há limitações na quantidade máxima que pode ser representada pelo tipo de dados inteiro do JavaScript.
Nos cálculos monetários, você também deve ter em mente que o dinheiro tem precisão finita (normalmente de 0 a 3 pontos decimais) e o arredondamento precisa ser feito de maneiras específicas (por exemplo, arredondamento "normal" versus arredondamento de banqueiros). O tipo de arredondamento a ser executado também pode variar de acordo com a jurisdição / moeda.
Como lidar com dinheiro em javascript tem uma discussão muito boa dos pontos relevantes.
Nas minhas pesquisas, encontrei a biblioteca dinero.js que aborda muitos dos problemas por meio de cálculos monetários . Ainda não o utilizou em um sistema de produção, portanto não pode dar uma opinião informada sobre ele.