1. PHP / Говнокод #8212

    +165

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    if($this->getAmount()){
    	$pos = strpos($this->getAmount(), '.');
    	if($pos === false )
    	{
    		$request->amount = $this->getAmount().'00';
    	}
    	else
    	{
    		$request->amount = str_replace('.','',$this->getAmount());
    	}
    }

    Magento extension: Cignex/Paymenttechchase
    Преобразование прайса в центы.
    Если цена заканчивается нулем, например 12.50 на выходе будет 125, а не 1250

    Запостил: vesan, 17 Октября 2011

    Комментарии (7) RSS

    • показать все, что скрытоэм?
      http://govnokod.ru/6342
      Ответить
      • Поясните мысль.
        Ответить
        • да нет у него никакой мысли
          Ответить
        • я механически опечатался в описании бага))
          если прайс = 12.5 (без нуля), то в результате получим 125 центов, а не 1250. Так владелец магазина терял деньги.
          вместо этих 11 строчек нужна всего одна:
          $request->amount = (int)(string)($this->getAmount()*100);

          (int)(string) именно в такой последовательности что бы не потерять цент http://stackoverflow.com/questions/812815/php-intval-and-floor-return-value-that-is-too-low
          Ответить
          • А почему бы не хранить деньги в виде целых чисел, т.е. кол-ва центов (а на вью выводить в желаемом виде)?
            Ответить
            • это архитекторов Magento надо спрашивать, но идею поддерживаю
              Ответить
          • round() естественнее и надёжнее.
            Ответить

    Добавить комментарий