Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подкорректировать цену 
V
    Опции темы
neoks
Дата 11.9.2011, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Вообшем нужно правильно выводить цены, делаю продажу модулей и не знаю как подойти.
Суть в том что продавец может указать любую цену например 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

Не знаю чем подойти циклом или заменой, может уже есть готовая функция ?

Это сообщение отредактировал(а) neoks - 11.9.2011, 12:35
PM MAIL   Вверх
ksnk
Дата 11.9.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



То есть, если в изображении числа две и больше точек - нужно их игнорировать? А что делать, если только одна точка, и та разделитель тысяч, а не разделитель копеек? Или просто декоративный элемент?

Самый разумный, имхо, способ - проверять число по маске. Если число не подходит - говорить "ошибка при вводе цены, возможно, вы имели вот это..." + пытаться его отконвертировать и предложить вариант правки пользователю. Тоесть, при неправильном вводе все равно добавляется один шаг корректировки. В этом случае очень умный вариант корректировки сочинять не нужно.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
neoks
Дата 11.9.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Нашол функцию http://ru.php.net/manual/ru/function.number-format.php

Код

number_format($number, 2, '.', '');


Вроде как подходит но слегка сомневаюсь в ней.

То есть если я укажу 10.000 то она мне вернет 10.00 получается вместо 10тыс я получу 10 баксов.
Или если я укажу 1000000 то она мне вернет 1000000.00 тока не знаю это и вправду один лимон получается если 2 нуля дописано с точкой smile

Как я понял нужно к этой функции что то еше придумать чтоб правильно работало или проше вариант сделать подсказку продавцу как нужно указывать цены.
Логично если ставить точку например 10000 и поставить точку 10.000 получается 10$ но с другой стороны там ведь 3 нуля а значит что это 10тыс.  smile 

Пока не понимая как это реализовать.
PM MAIL   Вверх
Muerto
Дата 11.9.2011, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Не пользуйся этой функцией, правильная формула того что тебе нужна будет

Код

floor (23.234234 * 10^2)   /  10^2 


Это сообщение отредактировал(а) Muerto - 11.9.2011, 13:33


--------------------
user posted image
PM MAIL   Вверх
neoks
Дата 11.9.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Muerto
Хм, какай та она странная, вместо 10 дает 8, вместо 10000 дает 10002 вместо 10.000 дает 8  smile 
PM MAIL   Вверх
Muerto
Дата 11.9.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Ну давай посчитаем

Код

10 * 10^2 = 1000
1000 / 10^2 = 10


Ищите странности у себя  smile 

На крайняк сюда вбить можно http://www.wolframalpha.com/

http://www.wolframalpha.com/input/?i=%28fl...%29++%2F++10^2+



Это сообщение отредактировал(а) Muerto - 11.9.2011, 14:03


--------------------
user posted image
PM MAIL   Вверх
neoks
Дата 11.9.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Вот сами попробуйте  smile 

Код

$a = 10 * 10^2; //1000
$b = $a / 10^2;//10
print $b;

// результат 8


Я не чего просто так не рассказываю, яж пробою и вот результат   smile 

А вообще пришла мне идея, просто напросто не давать продавцу вбивать больше 1й точки и парсить функцией number_format()
Она отлично работает вот только с 2мя точками плохо понимает.

Думаю так и сделаю, просто не дам вбивать больше 1й точки, как сделаю отпишусь.  smile 
PM MAIL   Вверх
Muerto
Дата 11.9.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Я вам дал в математической форме, а не в php

в php есть pow http://php.net/manual/en/function.pow.php для степени
Код

pow(10,2)  <=> 10^2

а floor http://php.net/manual/en/function.floor.php не меняется



Это сообщение отредактировал(а) Muerto - 11.9.2011, 14:08


--------------------
user posted image
PM MAIL   Вверх
neoks
Дата 11.9.2011, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



floor - для округления чисел что мне не нужно  smile 
pow - так и не понял что это такое.

Вообшем я сделал банально, запретил вбивать больше 1й точки  smile  и больше 2х нулей после точки.

Получилось так:

10.00
1.00
01.00
1
1000.00
1000

и тд. Потом подкорректирую своей функции и проверю функцией number_format();

Конечно вышло немного геморройно но что делать.
PM MAIL   Вверх
Muerto
Дата 11.9.2011, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Ну pow(x, y) Это тоже самое как x^y , это самая база школьная - степени, икс в квадрате pow(x,2)  smile 

А контралировать на стороне клиента плохо - он подменить может.


--------------------
user posted image
PM MAIL   Вверх
neoks
Дата 11.9.2011, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Хууу, все сделал.
Кому интересно вот скрипт.
Код

cor_price = function(id){
        var val  = $(id).val().replace(/[^0-9.]/g,'');
            val  = val.substr(0,10,val);
        var regh = '';
        
        var spl = val.split('.');
        
        if(spl.length > 1){
            
            if(spl[0].length > 1 && spl[0].substr(0,1) == '0'){
                val = val.substr(1,(val.length - 1));
            }
            
            if(spl[1].length > 2){
                val = val.substr(0,(val.length - 1));
            }
        }
        
        if(spl.length > 2){
            val = val.substr(0,(val.length - 1));
        }
            
        $(id).val(val);
    }


Код

function cur_prices($number){
    $pc = explode('.',$number);

    if(count($pc) > 1){
        $number = $pc[0].($pc[1] !== '' ? '.' : '').substr($pc[1],0,2);
    }

    return number_format($number, 2, '.', '');
}


Javascript стерает все ненужные значения, пример: 034.1339.098 переводит в 34.13
На случий если кто та отключит javascript или попытается подсунуть другие значения то функция cur_prices() заменит на тоже число что и java вернет 34.13

Пример javascript: функция срабатывает при нажатие клавы
Код

<input type="text" onkeyup="cor_price(this)" />



Это сообщение отредактировал(а) neoks - 11.9.2011, 15:07
PM MAIL   Вверх
Absinthe
Дата 11.9.2011, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

То есть если я укажу 10.000 то она мне вернет 10.00 получается вместо 10тыс я получу 10 баксов.
 А где тут 10 тыс упомянаются? Это все твои фантазии ))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.