Результат вашего ошибочного вывода moneyDouble
состоит в том, что moneyDouble
- это число с плавающей запятой.Они не могут точно выражать десятые, сотые, тысячные и т. Д.
Кроме того, числа с плавающей запятой действительно выражаются в двоичной форме, а это означает, что только (некоторые) двоичные числа могут быть выражены точно вплавающая запятая.Не говоря уже о том, что они имеют конечную точность, поэтому они могут хранить только ограниченное количество цифр (в том числе после десятичной точки).
Лучше всего использовать арифметику с фиксированной точкой , целочисленная арифметика , или реализуйте класс рациональных чисел , и вам может понадобиться номер библиотеки , так как вам, возможно, придется иметь дело с очень большими числами при очень большихточность.
См. Не работает ли математика с плавающей запятой? для получения дополнительной информации о неожиданных результатах точности с плавающей запятой.