Для нескольких вычислений не создавайте класс - это усложнит понимание кода (каждый раз, когда вы перегружаете оператор, вы должны учитывать, что будущие пользователи делают ошибки из-за неожиданного поведения). Сказав это, вы можете обойтись без очень простого класса, который просто содержит операторы cast-to-double и assign-from-double вместе с конструктором. Это было бы вполне приемлемо.
#include <cmath>
class Threep
{
double val;
public:
Threep(double x) : val(floor(x*1000)/1000) {}
operator double() { return val; }
double operator=(double rhs) { val = floor(rhs*1000)/1000; return val;}
double operator*=(double rhs) { val = floor((val*rhs)*1000)/1000; return val;}
double operator/=(double rhs) { val = floor((val/rhs)*1000)/1000; return val;}
double operator+=(double rhs) { val = floor((val+rhs)*1000)/1000; return val;}
double operator-=(double rhs) { val = floor((val-rhs)*1000)/1000; return val;}
};
Я добавил несколько удобных назначений вместе с оператором =: -)
Этот код не проверен, но, на мой взгляд, выглядит хорошо.