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]   

> Без описания
android
Отправлено: 22 Июня, 2012 - 14:54:40
Post Id


Посетитель


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


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




Всем здрасте, вот появилась проблемка...

Высчитываю сумму с процентом:

PHP:
скопировать код в буфер обмена
  1.  
  2. $money = 10;
  3. $sum = $money*0.95;
  4. echo $sum;
  5.  


Показывает округленно 9.4

А вот если через javascript:

CODE (javascript):
скопировать код в буфер обмена
  1. var money = 10;
  2. var sum = money.substr(0, result.indexOf('.') + 3);
  3. alert(sum);


Показывает 9.39

Вот как мне сделать так что бы и php показывал 9.39 а не 9.4

Не спрашивайте только зачем это...

Я проверяю на стороне сервера данные (мол чел подменит)
 
 Top
caballero
Отправлено: 22 Июня, 2012 - 14:56:47
Post Id


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


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


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




а должно быть 9.5


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
fdr21
Отправлено: 22 Июня, 2012 - 15:10:55
Post Id



Гость


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


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




android пишет:
от как мне сделать так что бы и php показывал 9.39 а не 9.4

$sum -= 0.01;
хотя это значение не правильное 9.39
Цитата:
Показывает округленно 9.4

У меня 9.5))
 
 Top
IllusionMH
Отправлено: 22 Июня, 2012 - 17:17:15
Post Id



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


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


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




android, в JS это вызвано способом хранения данных.
Чтобы вывести до определенного символа можно использовать .toFixed() либо .toPrecision().
Как пользоваться - читать тут (англ)

А вообще странные результаты, либо код неполный. Как заметили выше ни 9.4, ни 9.399999 не являются результатом 10*0.95. А код на JS заставляет глаза слезиться

результат в php
(Добавление)
К изучению

(Отредактировано автором: 22 Июня, 2012 - 17:21:04)

 
 Top
android
Отправлено: 22 Июня, 2012 - 21:14:02
Post Id


Посетитель


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


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




Извиняюсь не 0.95 а 0.94


0.94*10
 
 Top
IllusionMH
Отправлено: 22 Июня, 2012 - 21:25:59
Post Id



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


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


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




android, в JS использовать .toFixed(2) получится строка "9.40"
а если использовать для рсчетов, то можно смело забивать на эту неточность и обрезать хвост только в конце

(Отредактировано автором: 22 Июня, 2012 - 21:26:20)

 
 Top
android
Отправлено: 22 Июня, 2012 - 21:33:05
Post Id


Посетитель


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


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




Цитата:
Вот как мне сделать так что бы и php показывал 9.39 а не 9.4


Цитата:
Не спрашивайте только зачем это...

Я проверяю на стороне сервера данные (мол чел подменит)

(Добавление)
так что мне нужно что бы показывало с точностью до сотых в JS и PHP
 
 Top
IllusionMH
Отправлено: 22 Июня, 2012 - 21:46:57
Post Id



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


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


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




android, что непонятного в
IllusionMH пишет:
android, в JS использовать .toFixed(2) получится строка "9.40"

и
IllusionMH пишет:
(Добавление)
К изучению

?
 
 Top
Мелкий Супермодератор
Отправлено: 22 Июня, 2012 - 21:48:56
Post Id



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


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


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




android пишет:
нужно что бы показывало

number_format. Но зачем? Вам же сравнивать их.
При том, помните о том, что сравнивать 2 float'а невозможно из-за принципа их хранения?


-----
PostgreSQL DBA
 
 Top
vanicon
Отправлено: 22 Июня, 2012 - 21:49:27
Post Id



Частый посетитель


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


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




Думаю это то что Вам нужно для php http://www.php.su/functions/?round


-----
Так было, так есть и так будет
 
 Top
android
Отправлено: 22 Июня, 2012 - 23:38:50
Post Id


Посетитель


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


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




IllusionMH то что PHP выводит 9.4 а если я буду сравнивать if(9.4 == 9.40) echo 'ура'; else echo 'ошибка';

то у меня не пройдет функция
 
 Top
android
Отправлено: 23 Июня, 2012 - 12:46:18
Post Id


Посетитель


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


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




IllusionMH сделал как вы сказали, все получилось кроме одного...

Если мы 10*0.64 то PHP показывает 6.4

А toFixed(2) показывает 6.40 но не вариант исправить на toFixed(1)!!!


Мне нужны сотые
 
 Top
IllusionMH
Отправлено: 23 Июня, 2012 - 13:28:59
Post Id



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


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


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




android, я предупреждал на счет нуля в конце Улыбка
Можно сравнивать строками, в любом случае со стороны JS строка приходит

можно попробовать 3 варината
самый медленный
CODE (javascript):
скопировать код в буфер обмена
  1. >>> money = 10 * 0.94
  2. 9.399999999999999
  3. >>> parseFloat(money.toFixed(2))
  4. 9.4

вариант быстрее (если не ошибаюсь, то изменение порядка (умножение на степень 10) не вносит погрешности)
CODE (javascript):
скопировать код в буфер обмена
  1. >>> money = 10 * 0.94
  2. 9.399999999999999
  3. >>> Math.round(money * 100) / 100
  4. 9.4

ускоренный предыдущий вариант
CODE (javascript):
скопировать код в буфер обмена
  1. >>> money = 10 * 0.94
  2. 9.399999999999999
  3. >>> ((money * 100 + 0.5) >>> 0) / 100
  4. 9.4

(Отредактировано автором: 23 Июня, 2012 - 13:33:30)

 
 Top
android
Отправлено: 23 Июня, 2012 - 14:45:01
Post Id


Посетитель


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


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




Спасибо вроде бы все стабильно заработало! Закатив глазки
 
 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