За последние 24 часа нас посетили 17553 программиста и 1315 роботов. Сейчас ищут 1739 программистов ...

Проблема с bcmath: разрядность чисел с плавающей точкой.

Тема в разделе "Прочие вопросы по PHP", создана пользователем php_lover, 25 апр 2008.

  1. php_lover

    php_lover Активный пользователь

    С нами с:
    25 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    СПб
    Задача такая. Необходимо перемножить два числа с плавающей точкой с сохранением определенного кол-ва десятичных разрядов после запятой (например, 8). Для этого обычно используются функции библиотеки bcmath. Проблема в том, что они, похоже, неправильно понимают числа с фиксированной точкой типа 1.54е-5. Проиллюстрирую.

    Код (Text):
    1. <?php
    2. $d=8; // Число цифр после запятой в дробных величинах
    3. bcscale($d);
    4.  
    5. $a=0.0000154;
    6. $b=45.548;
    7. $res1=$a*$b;
    8. $res2=bcmul($a,$b);
    9.  
    10. echo "a = $a;<br>";
    11. echo "b = $b;<br>";
    12. echo "res1 = $res1;<br>";
    13. echo "res2 = $res2;";
    14. ?>
    Получаем:
    a = 1.54E-5;
    b = 45.548;
    res1 = 0.0007014392;
    res2 = 0.000;

    А ведь res2 должен быть равен 0.00070143. При этом, если увеличить а в 10 раз, оно будет отображаться как 0,000154 и результат выйдет верным: 0.00701439.
    Так как же добиться верного результата для мат. операций, где один из операндов < 0.0001 и > 0?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    а самому написать функцию обрезания по н разрядам займет много более 5 минут?
     
  3. php_lover

    php_lover Активный пользователь

    С нами с:
    25 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    СПб
    Надеялся, есть какие-то стандартные функции...
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
  5. php_lover

    php_lover Активный пользователь

    С нами с:
    25 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    СПб
    В том посте, сдается мне, похожая проблема, и она тоже не разрешена средствами пхп...
    Ф-я формат_намбер() не годится, понятное дело...