| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Подкорректировать цену |
| Автор: neoks 11.9.2011, 12:32 |
| Вообшем нужно правильно выводить цены, делаю продажу модулей и не знаю как подойти. Суть в том что продавец может указать любую цену например 0.10345563 или 10.000 или 1.200.0000 Нужно как то корректировать цены, чтоб получилось 0.10345563 = 0.10 10.000 = 10.000 1.200.0000 = 1200.00 1.235736 = 1.23 1234.56 = 1234.56 В вебмани сказано: Сумма платежа, которую продавец желает получить от покупателя. Сумма должна быть больше нуля, дробная часть отделяется точкой. То есть если поставить цену 0.104483552 то он мне скажет err: 2 payment amount (0.104483552) is incorrect or not defined by merchant step:8 Нужна ваша помощь, как можно подкорректировать цены чтоб получилось так: 0.10345563 = 0.10 10.000 = 10.000 1.200.0000 = 1200.00 1.235736 = 1.23 1234.56 = 1234.56 Не знаю чем подойти циклом или заменой, может уже есть готовая функция ? |
| Автор: ksnk 11.9.2011, 12:46 |
| То есть, если в изображении числа две и больше точек - нужно их игнорировать? А что делать, если только одна точка, и та разделитель тысяч, а не разделитель копеек? Или просто декоративный элемент? Самый разумный, имхо, способ - проверять число по маске. Если число не подходит - говорить "ошибка при вводе цены, возможно, вы имели вот это..." + пытаться его отконвертировать и предложить вариант правки пользователю. Тоесть, при неправильном вводе все равно добавляется один шаг корректировки. В этом случае очень умный вариант корректировки сочинять не нужно. |
| Автор: neoks 11.9.2011, 13:00 | ||
Нашол функцию http://ru.php.net/manual/ru/function.number-format.php
Вроде как подходит но слегка сомневаюсь в ней. То есть если я укажу 10.000 то она мне вернет 10.00 получается вместо 10тыс я получу 10 баксов. Или если я укажу 1000000 то она мне вернет 1000000.00 тока не знаю это и вправду один лимон получается если 2 нуля дописано с точкой Как я понял нужно к этой функции что то еше придумать чтоб правильно работало или проше вариант сделать подсказку продавцу как нужно указывать цены. Логично если ставить точку например 10000 и поставить точку 10.000 получается 10$ но с другой стороны там ведь 3 нуля а значит что это 10тыс. Пока не понимая как это реализовать. |
| Автор: Muerto 11.9.2011, 13:29 | ||
Не пользуйся этой функцией, правильная формула того что тебе нужна будет
|
| Автор: neoks 11.9.2011, 13:39 |
| Muerto Хм, какай та она странная, вместо 10 дает 8, вместо 10000 дает 10002 вместо 10.000 дает 8 |
| Автор: Muerto 11.9.2011, 13:51 | ||
Ну давай посчитаем
Ищите странности у себя На крайняк сюда вбить можно http://www.wolframalpha.com/ http://www.wolframalpha.com/input/?i=%28floor+%2823.236234+*+10^2%29+%29++%2F++10^2+ |
| Автор: neoks 11.9.2011, 14:03 | ||
Вот сами попробуйте
Я не чего просто так не рассказываю, яж пробою и вот результат А вообще пришла мне идея, просто напросто не давать продавцу вбивать больше 1й точки и парсить функцией number_format() Она отлично работает вот только с 2мя точками плохо понимает. Думаю так и сделаю, просто не дам вбивать больше 1й точки, как сделаю отпишусь. |
| Автор: Muerto 11.9.2011, 14:04 | ||
| Я вам дал в математической форме, а не в php в php есть pow http://php.net/manual/en/function.pow.php для степени
а floor http://php.net/manual/en/function.floor.php не меняется |
| Автор: neoks 11.9.2011, 14:32 |
| floor - для округления чисел что мне не нужно pow - так и не понял что это такое. Вообшем я сделал банально, запретил вбивать больше 1й точки Получилось так: 10.00 1.00 01.00 1 1000.00 1000 и тд. Потом подкорректирую своей функции и проверю функцией number_format(); Конечно вышло немного геморройно но что делать. |
| Автор: Muerto 11.9.2011, 14:45 |
| Ну pow(x, y) Это тоже самое как x^y , это самая база школьная - степени, икс в квадрате pow(x,2) А контралировать на стороне клиента плохо - он подменить может. |
| Автор: neoks 11.9.2011, 15:06 | ||||||
| Хууу, все сделал. Кому интересно вот скрипт.
Javascript стерает все ненужные значения, пример: 034.1339.098 переводит в 34.13 На случий если кто та отключит javascript или попытается подсунуть другие значения то функция cur_prices() заменит на тоже число что и java вернет 34.13 Пример javascript: функция срабатывает при нажатие клавы
|
| Автор: Absinthe 11.9.2011, 16:56 | ||
|