ExBB Community ExBB Community
 Сайт проекта ExBB Общение объединяет!
Войдите на форум при помощиВойти через loginza
 Чат на форуме      Помощь      Поиск      Пользователи     BanList BanList


 Страниц (1): [1]   

> Без описания
KaRaL
Отправлено: 19 октября 2010 — 16:41
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 42
Дата рег-ции: Май 2009  
Откуда: Россия
Репутация: 2




В php при сложении переменной (например $a=3) с 17- значным (например $b=12345678901234567) числом получается результат 1.2345678901E+16.
Как сделать чтоб выводилось простое число, а не 1.2345678901E+16.
 
 
yura3d
Отправлено: 20 октября 2010 — 04:08
Post Id


Пользователь
ExBB Team
ExBB Developer
ExBB Mods Author


Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009  
Откуда: Минск, Беларусь
Репутация: 353




KaRaL
Можно перед печатью преобразовать число в строку:
CODE:
$c = (string)($a + $b);
 
 
KaRaL
Отправлено: 20 октября 2010 — 13:25
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 42
Дата рег-ции: Май 2009  
Откуда: Россия
Репутация: 2




Спасибо
 
 
yura3d
Отправлено: 21 октября 2010 — 06:59
Post Id


Пользователь
ExBB Team
ExBB Developer
ExBB Mods Author


Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009  
Откуда: Минск, Беларусь
Репутация: 353




KaRaL пишет:
Спасибо

Возможен ещё вариант:
CODE:
$c = sprintf("%.0f", $a + $b);

В этом случае число будет приведено к нужной Вам форме, однако из-за переполнения мантиссы числа содержимое младших разрядов может быть неопределённым. Например, следующий фрагмент:
CODE:
<?php
$a = 3;
$b = 12345678901234567;
$c = sprintf("%.0f", $a + $b);
echo $c;
?>

вместо ожидаемого результата 12345678901234570 напечатает 12345678901234572. Двойка в конце как раз и вызвана переполнением. К сожалению, работа с более широкой мантиссой в PHP не предусмотрена. Однако в PHP есть функции, позволяющие осуществлять арифметические операции над числами произвольной точности, представленными в виде строк. В Вашем случае рекомендую пользоваться именно ими. Одна из таких функций - функция сложения bcadd(). Вот пример её использования:
CODE:
<?php
$a = '3';
$b = '12345678901234567';
$c = bcadd($a, $b);
echo $c;
?>

Данный пример напечатает верный результат - 12345678901234570. Обратите внимание на то, что значения переменных-слагаемых $a и $b заключены в кавычки. Это необходимо для того, чтобы PHP присваивал им значения-строки, а не числа. В базе данных (или в файле при хранении данных методом сериализации) необходимо также сохранять эти значения как строки. Иначе может возникнуть всё та же проблема с переполнением мантиссы числа, что и в первом случае
 
 
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« PHP/Perl »

> Похожие темы: PHP, числа большой точности
Темы Форум Информация о теме Обновление
Радио на сайт
Небольшой скрипт радио на ваш сайт
Скрипты Ответов: 63
Автор темы: Jordan
13 ноября 2013 — 19:38
Автор: LA
Мод: Ограничение числа выводимых разделов в категориях
Модификации и дополнения Ответов: 0
Автор темы: Дядя Митя
26 ноября 2010 — 23:45
Автор: Дядя Митя
 



Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 




Яндекс.Метрика   

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0569]     [ ]