Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Посчитать комиссию WebMoney (0.8 %)


Автор: Black 29.7.2005, 21:26
Необходимо считать на JavaScript комиссию WebMoney перевода между кошельками.

Процент коммисии состовляет 0.8% от суммы перевода, но не менее 0.01 цент за перевод.

Сделал так:

Код

var kom = parseInt((eval(document.getElementById('summa'+id).value) / 100 * 0.8) * 100)/100;
if(kom==0) { kom=0.01; }  


Но считает не правильно некоторые суммы, например 77.77 WMZ у меня считает как 0.62, а у WebMoney как 0.63

Не пойму как же они считают?

Автор: Black 29.7.2005, 22:02
Код

var kom = eval(document.getElementById('summa'+id).value) / 100 * 0.8;

  if(/^[0-9]{1,}.[0-9]{3,}$/.test(kom))
  {
  kom = parseInt(kom*100)/100;
  kom += 0.01;
  }
  else { kom = parseInt(kom * 100) / 100; }


Почему то хоть это не работает?

kom += 0.01;
вот на этой строчке ошибка, JavaScript не может прибавить 0.01


Добавлено @ 22:08
странновсе это числа больше 8 нормально прибавляются по 0.01 а меньше выдают подобные значения

0.06999999999999999

Что за это значит?

Автор: Sardar 29.7.2005, 23:01
Во первых ты когда нибудь задумывался зачем нужна функция eval? smile

Второе, ты когда нибудь думал о том как дробные числа храняться в памяти компьютера? Знаем о числах с плавающей запятой(мантисса, экспонента) ?

В третьих почему так? smile
Код
var a=0.1;
var b=0.7;
var c=a+b;
alert(c); //должен выдать 0.8, а даёт 0.799999999 =)


О регах говорить не буду, мы уже условились что ты их используешь везде где не надо smile

Если наступило просветление о настоящих машинных числах, то вспомним что фикситься бага простым округлением. Кстати деньги считают не в нативных числах, а используют специальные библиотеки с высокой точностью.

Теперь глянь на этот код:
Код
<input type="text" id="summa"><button onclick="count()">Test</button>
<script type="text/javascript">
<!--
function count() {
  var kom = (document.getElementById('summa').value * 100 * 0.8);
  kom=(kom<100)? kom=0.01: (kom/10000).toFixed(2); //две цыфры после запятой
  alert(kom);
}
 
//-->
</script>


Подумай smile

Автор: Black 29.7.2005, 23:21
Sardar
я то подумал..

твой код тоже не работает как надо, если бы все было так просто smile

Эти чуваки из вебмани считают как-то по-особо хитрому, например, число

77.77 комиссия отWebMoney 0.63, твой код (впрочем как и мой) дает 0.62

Я так понял они до того любят деньги что себе их добавляют не используя правила округления.. например:

77.77 / 100 * 0.8 = 0.62216

ВебМанщики берут это число отрезают до дхух символов после точки... затем они еще как-то смотря, что если третья цифра не ноль они добавляют еще один цент :-)

Вот такие они хитрые. Как бы это на JavaScript реализовать.
Добавлено @ 23:25
Код

kom = Math.ceil(document.getElementById('summa'+id).value*1.008*100-0.000001)/100;
alert(kom);



Только этот код говорит сумму с комиссией, а мне надо отдельно комиссию узнать

Добавлено @ 23:30
Вот я тупой smile

Вот же правильный код:

Код

kom = Math.ceil(document.getElementById('summa'+id).value*0.008*100-0.000001)/100;


Только как можно было до такого додуматься я так и не пойму smile

Автор: Иль 30.7.2005, 10:01
Да все по чесному, они округляют по правилам округления "Все в свою сторону". Я тоже так делаю smile
Простите за офтоп

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)