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. android - 22 Июня, 2012 - 14:54:40 - перейти к сообщению
Всем здрасте, вот появилась проблемка...

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

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

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

Я проверяю на стороне сервера данные (мол чел подменит)
2. caballero - 22 Июня, 2012 - 14:56:47 - перейти к сообщению
а должно быть 9.5
3. fdr21 - 22 Июня, 2012 - 15:10:55 - перейти к сообщению
android пишет:
от как мне сделать так что бы и php показывал 9.39 а не 9.4

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

У меня 9.5))
4. IllusionMH - 22 Июня, 2012 - 17:17:15 - перейти к сообщению
android, в JS это вызвано способом хранения данных.
Чтобы вывести до определенного символа можно использовать .toFixed() либо .toPrecision().
Как пользоваться - читать тут (англ)

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

результат в php
(Добавление)
К изучению
5. android - 22 Июня, 2012 - 21:14:02 - перейти к сообщению
Извиняюсь не 0.95 а 0.94


0.94*10
6. IllusionMH - 22 Июня, 2012 - 21:25:59 - перейти к сообщению
android, в JS использовать .toFixed(2) получится строка "9.40"
а если использовать для рсчетов, то можно смело забивать на эту неточность и обрезать хвост только в конце
7. android - 22 Июня, 2012 - 21:33:05 - перейти к сообщению
Цитата:
Вот как мне сделать так что бы и php показывал 9.39 а не 9.4


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

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

(Добавление)
так что мне нужно что бы показывало с точностью до сотых в JS и PHP
8. IllusionMH - 22 Июня, 2012 - 21:46:57 - перейти к сообщению
android, что непонятного в
IllusionMH пишет:
android, в JS использовать .toFixed(2) получится строка "9.40"

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

?
9. Мелкий - 22 Июня, 2012 - 21:48:56 - перейти к сообщению
android пишет:
нужно что бы показывало

number_format. Но зачем? Вам же сравнивать их.
При том, помните о том, что сравнивать 2 float'а невозможно из-за принципа их хранения?
10. vanicon - 22 Июня, 2012 - 21:49:27 - перейти к сообщению
Думаю это то что Вам нужно для php http://www.php.su/functions/?round
11. android - 22 Июня, 2012 - 23:38:50 - перейти к сообщению
IllusionMH то что PHP выводит 9.4 а если я буду сравнивать if(9.4 == 9.40) echo 'ура'; else echo 'ошибка';

то у меня не пройдет функция
12. android - 23 Июня, 2012 - 12:46:18 - перейти к сообщению
IllusionMH сделал как вы сказали, все получилось кроме одного...

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

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


Мне нужны сотые
13. IllusionMH - 23 Июня, 2012 - 13:28:59 - перейти к сообщению
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
14. android - 23 Июня, 2012 - 14:45:01 - перейти к сообщению
Спасибо вроде бы все стабильно заработало! Закатив глазки

 

Powered by ExBB FM 1.0 RC1