За последние 24 часа нас посетили 50897 программистов и 1736 роботов. Сейчас ищут 893 программиста ...

PHP малые величины

Тема в разделе "Прочие вопросы по PHP", создана пользователем dnk588, 4 авг 2015.

  1. dnk588

    dnk588 Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    2
    Симпатии:
    0
    Привет.
    Кто-нибудь сталкивался с проблемой малых величин на пхп?
    Такая штука возникла, что когда большое количество нулей после запятой, то пхп приводит число к виду 3.4E-8 например.
    А есть ли возможность предотвращать это?
    То есть нужно число как оно есть, без превращения.

    Консультировался со знакомыми программистами, говорят что сам язык программирования имеет ограничение. То есть значение хранится в памяти, а среда выделяет ограниченное количество памяти под хранение переменной. Поэтому и происходит подобное превращение.

    Кто что знает, делитесь. :)
     
  2. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Код (PHP):
    1. $a = 3.4e-8;
    2. echo sprintf("%.9f", $a); 
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    еще есть number_format()
     
  5. dnk588

    dnk588 Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    2
    Симпатии:
    0
    Этот вариант вполне сработал.

    Огромное спасибо всем.

    Добавлено спустя 16 минут 44 секунды:
    Если вдруг кому понадобится эта инфа
    При использовании варианта sprintf следует иметь в виду, что для длинных чисел возможны флуктуации:
    Код (Text):
    1.  
    2. $a = 12312312312.3312312312312312312312312312312;
    3. die(var_dump(sprintf("%.15f", $a)));
    4. string '12312312312.331232070922852' (length=27)
    Для моей задачи этот вариант подошел, но для задач с повышенной точностью лучше будет использовать расширение BCmath
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    php и математические задачи с повышенной точностью - странное весьма сочетание
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Эхехе... Это не проблема PHP или sprintf. Это проблема обработки чисел на уровне процессора. Она языконезависимая. Вооооооооообще. Это одна из причин, например, почему по рукам могут бить за хранение денежных сумм во float-ах. Тоже назависимо от языка.

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