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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: убрать нули в начале числа

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
xhugo
Отправлено: 22 Апреля, 2014 - 17:17:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




Добрый день.

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

пробовал 0.00001+0=1.0E-5
 
 Top
DlTA
Отправлено: 22 Апреля, 2014 - 17:29:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




 
 Top
IllusionMH
Отправлено: 22 Апреля, 2014 - 17:44:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




xhugo, вы вместо float'ов строки сравниваете?
 
 Top
xhugo
Отправлено: 22 Апреля, 2014 - 18:21:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




IllusionMH пишет:
xhugo, вы вместо float'ов строки сравниваете?


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

DlTA пишет:
number_format()

как поможет он в моем случае?
числа могут быть совершенно любые, нужно без всякого округления
просто убрать лишние нули и защитить от лишних символов для запроса
 
 Top
IllusionMH
Отправлено: 22 Апреля, 2014 - 18:31:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




xhugo, это только для проверки на "валидность"? Чем is_float не угодил?
Приводите к флоату и так и пишите в БД. Потом он обратно нормально приведется к флоату через (float).

(Отредактировано автором: 22 Апреля, 2014 - 18:33:40)

 
 Top
xhugo
Отправлено: 22 Апреля, 2014 - 19:08:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




но число может быть и не 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 могу, но это лишь проверка, нули не убирает

(Отредактировано автором: 22 Апреля, 2014 - 19:13:33)

 
 Top
MADONZY
Отправлено: 22 Апреля, 2014 - 21:42:29
Post Id


Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Попробуй так:
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. }
 
 Top
Ch_chov
Отправлено: 23 Апреля, 2014 - 05:18:31
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Хранить цены в float не принято, из-за возможных проблем с округлением.
Нолики можно также с помощью trim убрать
 
 Top
DlTA
Отправлено: 23 Апреля, 2014 - 08:42:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




xhugo пишет:
0000.00001000
не пойму, а что это за хрень и откуда берется? зачем сравнивать число с вот этим?
почему перед сравнением нельзя привести оба операнда к единому виду?
 
 Top
esterio
Отправлено: 23 Апреля, 2014 - 10:36:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Ch_chov
говорит то что надо. никто в здравом уме не хранит float-ы.
Данное поведение описано в офф документации
http://www.php.net/manual/ru/lan....types.float.php
Цитата:
floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....

Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB