Числовые значения переменной CValue можно присваивать простым оператором "=":
Все прекрасно работает, пока не наступает необходимость присвоить переменной дробное значение. Даже, если мы явно присвоим переменной значение типа double, значение все равно будет усекаться до целого числа:
Данное поведение вызвано тем, что для класса CValue определен оператор "=" для целых чисел. Поэтому наше число типа double неявно преобразуется в целое число, а затем срабатывает оператор "=" для целого числа.
Эту проблему можно решить использованием типа CNumeric?:
Для класса CNumeric определен конструктор для double. А для класса CValue существует оператор "=" для класса CNumeric, поэтому все проходит корректно.