Как поступить с float числами при работе с ценами на товары интернет магазина?
Здравствуйте. Делаю интернет магазин и появилась надобность продавать товар и поштучно и по 100 грамм (магазин продуктов). Соответственно, например, считая добавляя товар в корзину у меня идет работа либо с целыми числами, либо с действительными с 1-м знаком после запятой. Как известно есть погрешность компьютерная и я хотел бы узнать какой самый оптимальный способ для работы с данными числами. Пока у меня в выборе 3 способа:
1) умножать на 10, проводить операции, делить на 10
2) Использовать библиотеку для работы с числами большой точности, но здесь она нужна доя 1 знака после запятой
3)либо отдельно работать с числами до запятой и после запятой, проводить действия, и объединять в одно число.
Как поступить?
Если хотите качественно оперировать числами с плавающей точкой - то лучше использовать библиотеки BC Math Functions или GMP Functions.
Умножение на 10, приведение к Integer и потом обратно, конечно, будет работать - но, полагаю, весьма сложно будет не запутаться, да и со временем если придется повышать точность то будет ещё тот геморрой (хотя можно попробовать сделать простые обертки вроде add()/sub() и использовать их повсеместно).
Rsa97: Ну если так, то проще просто умножить на 10 и привести к integer. И на выходе будем работать со 105, а не 1050, согласитесь хоть какая экономия памяти, а есть)
ZLOFENIX: вопрос в погрешности. Например в js сумма 0.1 + 0.2 = 0.30000000000000004. А может быть такое в php, что хочу получить результат, например, 2. 7, а из за погрешности получаю 2,8222 и, как понимаете, не пойдет
ssrdop: так вы храните полное значение и вычисляйте через них, а уже сам ответ округляйте для посетителей. из-за .000000000000004 стало 2.8 вместо 2.7?