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]   

> Без описания
deu
Отправлено: 03 Ноября, 2016 - 17:26:42
Post Id



Новичок


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


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




собственно суть такая,у нас могут быть пару чисел
к примеру у нас три числа,могут приходить абы как,как с числом так и с точкой.
но могут и просто целые.

126783.48 + 1956,09 - 128739.57

т е по идее для корректной работы нужно запятые заменить на точки,
и соответственно делаем к примеру функцию

function zap_int ($a) {
$b = str_replace(",",".",$a);
return($b);
}

и дальше делаем так

zap_int (126783.48) + zap_int (1956,09) - zap_int (128739.57)

но ответ приходит -1.4551915228367E-11
Не понял

в чем проблема.

(Отредактировано автором: 03 Ноября, 2016 - 17:37:12)

 
 Top
Мелкий Супермодератор
Отправлено: 03 Ноября, 2016 - 17:53:19
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




А в чём проблема? Результат вполне правдоподобный.


-----
PostgreSQL DBA
 
 Top
Fart
Отправлено: 03 Ноября, 2016 - 18:00:14
Post Id



Посетитель


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


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




я так понимаю числовой формат нужен? так пробуй:

Спойлер (Отобразить)


и на будущее смотри формат делиметра зпт или тчк... тут разные форматы.
 
 Top
deu
Отправлено: 03 Ноября, 2016 - 18:01:45
Post Id



Новичок


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


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




Мелкий пишет:
А в чём проблема? Результат вполне правдоподобный.


ну вообще там же 0 должно вывести
(Добавление)
Fart пишет:
я так понимаю числовой формат нужен? так пробуй:

Спойлер (Отобразить)


и на будущее смотри формат делиметра зпт или тчк... тут разные форматы.


мне нужно получить 0 в данном примере,а выводит то число,что я писал выше.
 
 Top
Fart
Отправлено: 03 Ноября, 2016 - 18:05:48
Post Id



Посетитель


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


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




подставь свой пример... я ввел другие цифры
 
 Top
deu
Отправлено: 03 Ноября, 2016 - 18:11:09
Post Id



Новичок


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


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




Fart пишет:
подставь свой пример... я ввел другие цифры


CODE (htmlphp):
скопировать код в буфер обмена
  1.     function zap_int ($a)
  2.     {
  3.             $b = str_replace(',', '.',$a);
  4.             $b = floatval($b);
  5.             return $b;
  6.     }
  7.      
  8.     $t1 = "126783.48';
  9.    $t2 = '1956,09';
  10.    $t3 = "128739.57";
  11.    
  12.    echo zap_int($t1)+zap_int($t2)-zap_int($t3);


ответ -1.4551915228367E-11
а надо 0

(Отредактировано автором: 03 Ноября, 2016 - 18:12:50)

 
 Top
Fart
Отправлено: 03 Ноября, 2016 - 19:05:40
Post Id



Посетитель


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


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




проблема не в функции.

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

вкратце связано цитата:
Спойлер (Отобразить)


твоя задача с учетом этого с "костылем"

Спойлер (Отобразить)


есть еще какой то вариант... забыл как.. че то с форматирование данных и потом только складывать... или наоборот (( не помню...
 
 Top
deu
Отправлено: 03 Ноября, 2016 - 19:25:45
Post Id



Новичок


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


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




дело в том ,что по идее округлять нельзя, это же деньги )
 
 Top
Fart
Отправлено: 03 Ноября, 2016 - 19:41:18
Post Id



Посетитель


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


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




тогда так

Спойлер (Отобразить)


под функцию адаптируй сам
 
 Top
Мелкий Супермодератор
Отправлено: 03 Ноября, 2016 - 20:33:14
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




deu пишет:
дело в том ,что по идее округлять нельзя, это же деньги )

Значит не используйте формат с плавающей запятой. Вообще не использовать. В php формата с фиксированной запятой нативного нет.
Например, умножайте на 100 и приводите к int. Дальше работайте в копейках.
Или использовать библиотеку для точной математики. bc math или что-нибудь оттуда же.
Или осмыслить, что хвостом е-11 можно пренебречь даже в деньгах. Всё равно php данные не хранит и используется только для отображения.


-----
PostgreSQL DBA
 
 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