[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Математика в PHP
SuccessLord
echo (int)((0.1+0.7)*10);

В результате выводит 7.
Почему?
inpost
SuccessLord
А ты попробуй из object сделать array, или из string - object.
Грубо говоря не делай так smile.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
SuccessLord
Я понимаю - не делай.
Просто пока только учусь и пытаюсь разобраться что здесь не так.
По правилам математики, вначале в скобках 0,1+1,7 даст 0,8. Затем эти 0,8 умножатся на 10 и получится 8. Привести к int здесь наверное не проблема.
К примеру такой код:
echo (int)((0.11+0.7)*10);

Выдает результат 8.
echo (int)((0.1+0.8)*10);

Выдает 9
Т.е. все остальное правильно считается, только (0,1+0,7) в этом случае почему-то равно 0,7.
Или здесь другие правила?
sergeiss
Цитата (SuccessLord @ 4.05.2014 - 19:11)
Или здесь другие правила?

Правило тут единое smile.gif Все вещественные числа хранятся в едином формате. Проблема только в том, что если ты записал 0.7, то это не значит, что именно такое число будет записано в компе. Это может быть и число чуть меньше твоего. Например, 0.6999999999999999999573 или что-то подобное.

Почитай про представление вещественных чисел, например тут: http://ru.wikipedia.org/wiki/Число_с_плавающей_запятой

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
inpost
Когда человек начинает что-то учить, то пунктом №1 он должен почитать мануал.
0.7 - это число с плавающей запятой, то есть тип float. Почему бы не открыть и не почитать:
http://www.php.net/manual/ru/language.types.float.php

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
SuccessLord
Цитата
Когда человек начинает что-то учить, то пунктом №1 он должен почитать мануал...

Ну извините... Не все знают, где нужный материал в этом "мануале".
Очень хорошо, что есть знающие мануал люди, которые всегда готовы прийти на помощь.
Для того наверное и есть форум, чтобы более опытные программисты делились с начинающими своим опытом. Конечно же при желании и главное - наличии этого опыта.
А упрекать в том, что кто-то что-то должен сделать...
Спасибо за ссылку. Почитаю.
YVSIK
одни учителя остались.Даааааааааааааааааааа)) нет слоав
вот и они, ответы
кстати ту прозвучало словосочетание, "плавающая точка" уже почти хорошо

вот и ответ: php о плавюащих числах с точкой
http://www.php.net/manual/ru/language.types.float.php
И точное описание
Цитата
Числа с плавающей точкой имеют ограниченную точность. Хотя это зависит от операционной системы, в PHP обычно используется формат двойной точности IEEE 754, дающий максимальную относительную ошибку округления порядка 1.11e-16. Неэлементарные арифметические операции могут давать большие ошибки, и, разумеется, необходимо принимать во внимание распространение ошибок при совместном использовании нескольких операций.

по моему не трудно было отписать

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
YVSIK
да не это не упрек совсем))
Цитата (SuccessLord @ 6.05.2014 - 22:43)
А упрекать в том, что кто-то что-то должен сделать...

это намек надо учиться и идти к нему в ученики))
вот тогда будешь должен по полной программе , а тут это цветочки

Зайди в личку отпиши
Ща я тебя к себе буду переманивать, бушь моим учеником, назло всем,, ph34r.gif Ой unsure.gif что-то не то ляпнул, ладно и так пойдет))

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
sergeiss
Цитата (YVSIK @ 7.05.2014 - 01:36)
Ща я тебя к себе буду переманивать, бушь моим учеником, назло всем,,

Бедные "твои ученики"... Они же станут безграмотными как в русском языке, так и в ПХП.

Цитата (YVSIK @ 7.05.2014 - 00:59)
вот и ответ: php о плавюащих числах с точкой
http://www.php.net/manual/ru/language.types.float.php
И точное описание

Вообще-то, еще 4-мая инпост дал эту ссылку... А я чуть раньше пояснил. Надеюсь, ТС уже давно нашел ответ на свой вопрос.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
YVSIK
Цитата (sergeiss @ 7.05.2014 - 01:41)
еще 4-мая инпост дал эту ссылку...

конечно дал, и очень хорошо что дал, вот только вначале отругал, а потом дал smile.gif
вот на что я и ответил )) tongue.gif
Цитата (SuccessLord @ 6.05.2014 - 22:43)
А упрекать в том, что кто-то что-то должен сделать...

кстати говоря , я такими фигурами речи обычно тут отписываю)

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
killer8080
SuccessLord
эти проблемы возникают из-за не кратности двоичной и десятичной систем счисления.
http://ru.wikipedia.org/wiki/%D7%E8%F1%EB%...%EF%FF%F2%EE%E9
Цитата
Запись в форме с плавающей запятой похожа на запись чисел в стандартном виде, но мантисса и экспонента записываются раздельно. Мантисса записывается в нормализованном формате — с фиксированной запятой, подразумеваемой после первой значащей цифры. Возвращаясь к примеру с Ио́, запись в форме с плавающей запятой будет 1528535047 с показателем 5. Это означает, что записанное число в 105 раз больше числа 1,528535047, то есть для получения подразумеваемого числа запятая сдвигается на 5 разрядов вправо. Однако, запись в форме с плавающей запятой используется в основном в электронном представлении чисел, при котором используется основание системы счисления 2, а не 10. Кроме того, в двоичной записи мантисса обычно денормализована, то есть запятая подразумевается до первой цифры, а не после, и целой части вообще не имеется в виду — так появляется возможность и значение 0 сохранить естественным образом. Таким образом, десятичная 9 в двоичном представлении с плавающей запятой будет записана как мантисса +1001000…0 и показатель +0…0100. Отсюда, например, беды с двоичным представлением чисел типа одной десятой (0,1), для которой двоичное представление мантиссы оказывается периодической двоичной дробью — по аналогии с 1/3, которую нельзя конечным количеством цифр записать в десятичной системе счисления.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.