float
является ограниченным форматом данных и может содержать только столько бит информации (или std::numeric_limits<float>::digits10
десятичных знаков), в вашем случае достаточно только для 12312314, но не больше информации.
Какбыстрый обходной путь, который вы можете попробовать использовать double
или даже long double
, однако вам следует подумать о том, какими свойствами вы хотите, чтобы ваши числа обладали.Двоичные числа с плавающей запятой не могут даже точно представлять числа, такие как 0.1
(обширная информация по этому вопросу может быть найдена здесь ).
Поскольку вы имеете дело с денежными монетами, используйте десятичную с плавающей запятойбиблиотека или библиотека с фиксированной точкой может быть лучшей альтернативой.