Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Воспроизведение большого числа.
 
 автор: Владимир55   (13.02.2009 в 19:30)   письмо автору
 
 

Код
            $time_mks = 1234567890123456789012345;
            $time_mks = sprintf("%.0f", $time_mks);
            echo "<br>", $time_mks, "<br>";
выводит в броузере такой странный результат:
1234567890123456824475648

  Ответить  
 
 автор: cheops   (13.02.2009 в 19:47)   письмо автору
 
   для: Владимир55   (13.02.2009 в 19:30)
 

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

  Ответить  
 
 автор: Trianon   (13.02.2009 в 19:48)   письмо автору
 
   для: Владимир55   (13.02.2009 в 19:30)
 

var_dump($time_mks); после первой строки.

  Ответить  
 
 автор: Владимир55   (13.02.2009 в 19:56)   письмо автору
 
   для: Trianon   (13.02.2009 в 19:48)
 

Код:
            $time_mks = 1234567890123456789012345;
            var_dump($time_mks);
            $time_mks = sprintf("%.0f", $time_mks);
            echo "<br>", $time_mks, "<br>";

Результат исполнения:
float(1.23456789012E+24) 
1234567890123456824475648

  Ответить  
 
 автор: Trianon   (13.02.2009 в 20:00)   письмо автору
 
   для: Владимир55   (13.02.2009 в 19:56)
 

>Результат исполнения:
>
float(1.23456789012E+24) 
>1234567890123456824475648


Ну ведь равны?
Ту же мысль Игорь Вячеславович разжевали с присущим им политесом во всех подробностях.
Пищи для ума не оставив.

  Ответить  
 
 автор: Владимир55   (13.02.2009 в 20:06)   письмо автору
 
   для: Trianon   (13.02.2009 в 20:00)
 

Что то я не врубаюсь...

Задано 1234567890123456789012345
Выдано 1234567890123456824475648

Это равенство?

  Ответить  
 
 автор: Trianon   (13.02.2009 в 20:09)   письмо автору
 
   для: Владимир55   (13.02.2009 в 20:06)
 

17 десятичных цифр - приблизительна точность вещественных чисел в php
Чему Вы удивляетесь?

  Ответить  
 
 автор: Владимир55   (13.02.2009 в 20:19)   письмо автору
 
   для: Trianon   (13.02.2009 в 20:09)
 

Я привык считать, что рнр столь могуч, что может всё...

А повысить эту точность нет возможности?

  Ответить  
 
 автор: Trianon   (13.02.2009 в 20:32)   письмо автору
 
   для: Владимир55   (13.02.2009 в 20:19)
 

а что вы такое считаете, что Вам нужна такая невъе... брутальная точность?

расширения bc и gmp могут повысить до .... и выше.
но зачем?

  Ответить  
 
 автор: Владимир55   (13.02.2009 в 20:36)   письмо автору
 
   для: Trianon   (13.02.2009 в 20:32)
 

Это у меня идентификатор. Он не вычисляется, а задается, и хотелось бы сохранить в целости его 20 разрядов. Если это возможно без особых сложностей. Куда это bc впиявить?

  Ответить  
 
 автор: ddhvvn   (13.02.2009 в 20:38)   письмо автору
 
   для: Владимир55   (13.02.2009 в 20:36)
 

Фигасе, идентификатор )

  Ответить  
 
 автор: Trianon   (13.02.2009 в 20:42)   письмо автору
 
   для: ddhvvn   (13.02.2009 в 20:38)
 

Ну нравятся человеку крупные вещи, что тут поделать... :)

  Ответить  
 
 автор: Trianon   (13.02.2009 в 20:41)   письмо автору
 
   для: Владимир55   (13.02.2009 в 20:36)
 

если это идентификатор, и он не вычисляется, держите его в виде текста.

  Ответить  
 
 автор: AcidTrash   (13.02.2009 в 20:52)   письмо автору
 
   для: Владимир55   (13.02.2009 в 20:36)
 

Хотелось спросить, это интендификатор чего, и как он образуется?

  Ответить  
 
 автор: Владимир55   (13.02.2009 в 21:11)   письмо автору
 
   для: AcidTrash   (13.02.2009 в 20:52)
 

Это идентифкатор строки для базы. Я получаю его так:
            list($usec, $sec) = explode(" ", microtime());
            $time_mks = ($sec + $usec)*1000000 ;


Может, нужно
list($usec, $sec) = explode(" ", microtime());
            $time_mks = gmp_init (($sec + $usec)*1000000) ;


Так будет лучше?

==================
(С Трианоном согласен - строка решает проблемы. Но хочется понять и числовой способ).

  Ответить  
 
 автор: AcidTrash   (13.02.2009 в 21:24)   письмо автору
 
   для: Владимир55   (13.02.2009 в 21:11)
 

Это идентифкатор строки для базы
Не проще воспользоваться интендификатором именно базы по полю например id, с increment?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования