Ayant eu affaire à ce problème dans des systèmes financiers réels, je peux vous dire que vous souhaitez probablement utiliser un nombre avec une précision d'au moins 6 décimales (en supposant qu'il s'agisse de dollars américains). Comme vous parlez de valeurs monétaires, j'espère que vous ne vous tromperez pas. Il existe des propositions pour ajouter des types décimaux au C++, mais je n'en connais aucune qui soit encore en vigueur.
Le meilleur type natif C++ à utiliser ici serait long double.
Le problème avec les autres approches qui utilisent simplement un int est que vous devez stocker plus que vos cents. Souvent, les transactions financières sont multipliées par des valeurs non entières et cela va vous poser des problèmes puisque 100,25 $ traduits en 10025 * 0,000123523 (par exemple le TAEG) vont poser des problèmes. Vous allez finir par vous retrouver au pays des virgules flottantes et les conversions vont vous coûter cher.
Le problème ne se pose pas dans la plupart des situations simples. Je vais vous donner un exemple précis :
Si vous multipliez plusieurs milliers de valeurs monétaires par un pourcentage et que vous les additionnez, vous obtiendrez un chiffre différent de celui que vous auriez obtenu en multipliant le total par ce pourcentage si vous ne conservez pas suffisamment de décimales. Cela peut fonctionner dans certaines situations, mais il vous manquera souvent plusieurs centimes assez rapidement. D'après mon expérience générale, il faut veiller à conserver une précision allant jusqu'à 6 décimales (en s'assurant que la précision restante est disponible pour la partie du nombre entier).
Comprenez également que le type de stockage n'a pas d'importance si vous faites des calculs de manière moins précise. Si vos calculs sont effectués en simple précision, il importe peu que vous les stockiez en double précision. Votre précision sera correcte jusqu'au calcul le moins précis.
Cela dit, si vous ne faites pas d'autres calculs que de simples additions ou soustractions et que vous stockez ensuite le nombre, tout ira bien, mais dès qu'il y aura quelque chose de plus complexe, vous aurez des problèmes.