Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: убрать нули в начале числа
Форумы портала PHP.SU » » Вопросы новичков » убрать нули в начале числа

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

1. xhugo - 22 Апреля, 2014 - 17:17:05 - перейти к сообщению
Добрый день.

Проблема в формирование числа, к примеру число 0.00001
сначала пользовался floatval(0.00001), но получал 1.0E-5
поэтому теперь просто сравниваю if(price==floatval(price) true
Но, floatval автомат убирал нули лишние нули
как убрать лишние нули?

пробовал 0.00001+0=1.0E-5
3. IllusionMH - 22 Апреля, 2014 - 17:44:49 - перейти к сообщению
xhugo, вы вместо float'ов строки сравниваете?
4. xhugo - 22 Апреля, 2014 - 18:21:00 - перейти к сообщению
IllusionMH пишет:
xhugo, вы вместо float'ов строки сравниваете?


чтобы избежать такое 1.0E-5
$price='0.00001';
if($price==floatval($price){запрос в бд}

DlTA пишет:
number_format()

как поможет он в моем случае?
числа могут быть совершенно любые, нужно без всякого округления
просто убрать лишние нули и защитить от лишних символов для запроса
5. IllusionMH - 22 Апреля, 2014 - 18:31:39 - перейти к сообщению
xhugo, это только для проверки на "валидность"? Чем is_float не угодил?
Приводите к флоату и так и пишите в БД. Потом он обратно нормально приведется к флоату через (float).
6. xhugo - 22 Апреля, 2014 - 19:08:19 - перейти к сообщению
но число может быть и не float

вот как делаю
PHP:
скопировать код в буфер обмена
  1.  
  2. $price=$_POST['price']; //0.00001
  3. if(floatval($price)!=$price){
  4.         $error='values ​​are incorrect';
  5. }
  6.  

но, если будет 0000.00001000
floatval вернет 0.00001(точнее 1.0E-5)
при сравнение if(1.0E-5==0000.00001000) будет true
поэтому надо как убрать нули до проверки, чтобы занести нормальное число в БД

использовать is_int/is_float/is_numeric могу, но это лишь проверка, нули не убирает
7. MADONZY - 22 Апреля, 2014 - 21:42:29 - перейти к сообщению
Попробуй так:
PHP:
скопировать код в буфер обмена
  1. $a = 0000.00001000;
  2. $c = sprintf("%lf", $a);
  3. echo $c;

(Добавление)
ну или так (что-бы в конце вообще небыло нулей)
PHP:
скопировать код в буфер обмена
  1. function conv($num) {
  2.  
  3.         if(!is_double($num)) return $num;
  4.         $num++;
  5.         $num = (string)$num;
  6.         $num[0] = $num[0] - 1;
  7.         return $num;
  8.  
  9. }
8. Ch_chov - 23 Апреля, 2014 - 05:18:31 - перейти к сообщению
Хранить цены в float не принято, из-за возможных проблем с округлением.
Нолики можно также с помощью trim убрать
9. DlTA - 23 Апреля, 2014 - 08:42:41 - перейти к сообщению
xhugo пишет:
0000.00001000
не пойму, а что это за хрень и откуда берется? зачем сравнивать число с вот этим?
почему перед сравнением нельзя привести оба операнда к единому виду?
10. esterio - 23 Апреля, 2014 - 10:36:26 - перейти к сообщению
Ch_chov
говорит то что надо. никто в здравом уме не хранит float-ы.
Данное поведение описано в офф документации
http://www.php.net/manual/ru/lan....types.float.php
Цитата:
floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....

Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство

 

Powered by ExBB FM 1.0 RC1