Почему десятичные знаки не складываются правильно?

Я работаю над программой, в которой вы можете выбрать до 3 предметов, которые вы хотите разделить между пунктами.

Скажем, например, что действие набирает у вас 4 балла, и эти 4 точки разворачиваются среди 3 выбранных вами вещей.

В этом случае эти 3 вещи получат 1.33333 … балла.

В моей базе данных они хранятся как 1.33.

Однако, когда я вывожу их, он достигает 3,99.

    Понятный.

    Но как я могу избежать этого, не давая одной вещи 1,34 балла?

    Related of "Почему десятичные знаки не складываются правильно?"

    Храните полный float / double в своей базе данных, а не сокращайте до двух знаков после запятой. Время для trunc – это отображение значения пользователю – но только trunc отображаемая строка, а не фактическое значение .

    Значения с плавающей точкой – раздражающий пьяный дядя вычислений. Просто дайте им быть такими, какие они есть, а затем очистите их, когда они предстают перед глазом.

    В этом случае числа с плавающей точкой будут убыточными. Если вы имеете дело с целочисленными числителями и знаменателями, почему бы не сохранить числа в виде дробей? Вы можете использовать библиотеку Math Fraction Pear или написать что-то самостоятельно.

    Используйте третье десятичное место – не для отображения, а только для отслеживания точности. Если кто-то делит 4 очка среди трех, сохраните его как 1.333. Когда вы вычисляете назад, вы получаете 3.999, на котором вы округляете до 4. С другой стороны, если кто-то делит 3.99 среди трех объектов, сохраните его как 1.33, поэтому, когда вы вычисляете назад, вы получаете 3.99 (а не 3.999), и, таким образом, вы знать не округлять.