В C ++, чтобы избежать столкновения имен, вы можете заключить перечисления в структуры:
struct Month { enum {January, February, March, April, May, June, July,
August, September, October, November, December}; };
struct ShortMonth { enum {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; };
Не работайте в долларах (1,54 доллара), работайте в центах: (154c). Если вам не нужно выполнять задачи, в которых важны доли цента, вы будете работать с целыми числами, и все будет хорошо. Если вас интересуют десятые доли цента, то просто умножьте все на десять!
Если вы используете BCMath, все значения будут храниться в строках и передаваться функциям в виде строк, так же, как результатом будет строка. Таким образом, вам не нужно выполнять какое-либо преобразование, но убедитесь, что число, присвоенное функции, является числовым значением. Лично, если математика требует высокой точности в десятичной части, тогда используйте BCMath.
Если вы работаете с разумными суммами (для "нормального человека"), использование чисел с плавающей запятой вряд ли будет проблемой, особенно если вы просто добавляете и вычитаете суммы, а чем, скажем, вычислять проценты.
Если вы ищете быстрое решение, переход на целое число вряд ли вам поможет; вам все равно придется иметь дело с переполнением. (Кто-то отредактировал здесь, чтобы упомянуть, что если PHP встречает число за пределами целочисленного типа, оно будет интерпретировано как число с плавающей запятой вместо . Но тогда вы вернетесь к своей исходной проблеме использования плавающей запятой! ) Целые числа произвольной длины (GMP, ссылка на которую приведена на этой странице) могут помочь.)
В основном, выполнение этого наполовину неопределенным способом работает в большинстве случаев и стоит недорого; делать это правильно - серьезная боль.