Dubbi con aritmetica e float

Grazie per le risposte.
Non sò se utile, ma stò creando una classe Decimal per contenere numeri long long.

class Decimal : public Printable
{ private:
    int64_t  value;
    uint8_t  decimals; 
    uint32_t numdec;     // decimals=3 numdec=1000
...
Decimal operator+(Decimal d)
    { Decimal newd;
      newd.decimals=d.decimals;
      newd.value = value + d.value ;
      return newd;
    }

Una classe anche printable e con operatori overloaded.
La difficoltà è su operatore *

Decimal operator*(Decimal d)   
    { Decimal newd;
      newd.decimals=d.decimals;
      newd.value = value * d.value ;        // errato      
                                            // 123.45 * 9.52 => 1175.244        123.45 * 9.5 => 1172.775
                                            //  12345 * 952  => 11752440        12345 * 950  => 11727750
      return newd;
    }

Nella mia idea per ogni oggetto Decimal decidi anche quanti decimali (max 10) e quindi potrei moltiplicare 2 Decimal con numero decimali desiderati diversi.
Forse è meglio scegliere un numero di decimali fisso, esempio 10 con una bella #define e quindi decidere quanti decimali stampare solo in fase di "output" del dato ?
Comunque mi sono impantanato con la operator*