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

Форум PHP

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

 

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

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

тема: Загадка на PHP
 
 автор: tAleks   (26.08.2008 в 14:53)   письмо автору
 
 

Есть код:

<?php
$L 
150.2;

// Рассчитываем перменную
$t = ($L*100 intval($L)*100);
var_dump($t);
echo 
'<br>';
echo 
intval($t); 
echo 
'<br>';

// Просто задаем занчение
$t = (float)20;
var_dump($t);
echo 
'<br>';
echo 
intval($t);
?>


Это код выдает следующее:

float(20)
19
float(20)
20

Вопрос:
Почему в первом случае делается 19, а во вотором 20?

И как с этим боросться?

  Ответить  
 
 автор: Trianon   (26.08.2008 в 15:14)   письмо автору
 
   для: tAleks   (26.08.2008 в 14:53)
 

printf("L = %.20g , t = %.20g,  ", $L, $t);


150.2 непредставимо точно в двоичной системе. 10010110.(001)

  Ответить  
 
 автор: tAleks   (26.08.2008 в 15:18)   письмо автору
 
   для: Trianon   (26.08.2008 в 15:14)
 

Я не очень в этом понимаю, можно чуть подробнее?

И как в данной ситуации это побороть? Чтобы 20-ка оставалась двадцаткой?

  Ответить  
 
 автор: Trianon   (26.08.2008 в 15:20)   письмо автору
 
   для: tAleks   (26.08.2008 в 15:18)
 

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

  Ответить  
 
 автор: tAleks   (26.08.2008 в 15:26)   письмо автору
 
   для: Trianon   (26.08.2008 в 15:20)
 

а почему var_dump() в первом случае не выдает 19.9, а 20?

  Ответить  
 
 автор: Trianon   (26.08.2008 в 16:56)   письмо автору
 
   для: tAleks   (26.08.2008 в 15:26)
 

А она его округляет. До разумной точности. Где-то до 15 знака после запятой... по честным правилам округления. то есть от пятерки и выше - вверх.
intval же - отбрасывает. Наплевав, что там за цифры.

А если Вы про 20 - то 20 представляется точно: 10100

  Ответить  
 
 автор: sim5   (26.08.2008 в 15:20)   письмо автору
 
   для: tAleks   (26.08.2008 в 15:18)
 

echo gettype($t); - увидите. Уберите intval перед выводом результата получите 20.

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

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