Чем лечат покалеченные числа?

Zaval

Новичок
Чем лечат покалеченные числа?

БД MySql
Тип поля float
В нем держу количества.
В 99,9% это int.
Но проскакивают и float.
Так вот, значение 2.2 отображается как 2.20000004768372.
Вопрос точно уже обсуждался, но в поиске не искал,
не соображу как это правильно сформулировать.

Форматировать sprintf("%01.2f",$qqq) и т.д. считаю неразумно т.к. (В 99,9% это int.)
Чем это лечиться?
 

Zaval

Новичок
Десерт:
В поиске искал, в ответ тишина.
Все что нашел, это такие-же вопросы без ответа.
 

Profic

just Profic (PHP5 BetaTeam)
Прямого решения нет - можно только обойти такое поведение float-ов... :(
Вариант решения
PHP:
$a = 2.20000004768372;
$b = 2;
function num ($q) {
 if (floor ($q) == ceil ($q)) return ((int) $q);
 else {
  $q = sprintf ("%01.4f", $q);
  $q = rtrim ($q, '0');
  return $q;
 }
}
echo '<br>'.num ($a);
echo '<br>'.num ($b);
выводит
Код:
2.2
2
Т.е. именно, то, что нужно :)
Количество знаков после запятой выбирается в зависимости от встречающихся чисел
 

Zaval

Новичок
Profic спасибо.
А ты не в курсе кто виноват и почему не исправят.
Я думаю не первый кто "напоролся" на это странное поведение float-ов
 

Crazy

Developer
Да. Ты уже второй в этом году, кто занимается программированием, не имея понятия о том, как представлены в компьютере числа с плавающей точкой.

Единственное, чем можно тебе помочь, это отослать к учебникам. Это единственный способ "исправить" ситуацию.
 

Profic

just Profic (PHP5 BetaTeam)
Crazy, на самом деле, и что очень печально и что тебе наверняка известно, такого народа очень много... и, блин, они изобретают иногда такие велосипеды :(

Zaval, я то в курсе, и кто виноват и почему не исправляют, а вот ты видимо нет, что очень печально :(
Приведенная мною функция была написана за 2 минуты. Вопрос: а у самого дойти до решения не получилось?
Используются простейшие мат функции и функции работы над строками, блин. (Хотя сейчас вспомнил, что целочисленные функции я проходил только на 1 курсе университета.)
ЗЫ. Не сочти за наезд, просто интересно :)
 

Zaval

Новичок
Crazy
Спросил по одной простой причине:

Именно для того чтобы не изобретать то что изобрел ты или тебе подобные.

Извини за такой тон, но когда ты встряешь, ты очень часто пытаешься донести до публики разницу между своим разитием и развтием спросившего фразой:
Единственное, чем можно тебе помочь, это отослать к учебникам. Это единственный способ "исправить" ситуацию.
Единственное, чем можно тебе помочь, это отослать к учебникам. Это единственный способ "исправить" ситуацию.
Могу поспорить она у тебя под hotkey
Вопрос: а у самого дойти до решения не получилось?
Профик, получилось.
Но это if (floor ($q) == ceil ($q)) return ((int) $q); - оптимальнее.
У меня по другому было - хуже.
 

RomikChef

Guest
Завальчик. разница между уровнем Крейзи и 99% посетителей данного форума действительно гигантская.

Донести он хочет не эту разницу. Тебе ее все равно не постичь.
А разницу между уровнем спросившего и минимальным уровнем знаний, который необходим для занятия программированием..

Если академик попрекнет тебя незнанием таблицы умножения, ты ведь не будешь говорить, что он просто хочет похвастаться своими знаниями?
или будешь?
 

Profic

just Profic (PHP5 BetaTeam)
RomikChef, lol (это я про академика :)

Zaval, но все же почитай литературу о том, как представляются float-числа в памяти компьютера - помогает понять многие непонятности с ними

ЗЫ. Спасибо нашему техникумовскому преподу С, за то, что он усиленно нам это вдалбливал :) А потом еще вдалбливал и препод по Ассемблеру :)
 

Zaval

Новичок
Завальчик. разница между уровнем Крейзи и 99% посетителей данного форума действительно гигантская.
Было-бы странно если-бы 99% посетителей данного форума оказались гениями.
А резко высказался я по поводу поста Крейзи по причине...
Для начала, Крейзи ты просто под руку попал - сори.
Но люди обратите внимание на топики:
Как сделать? - в ман.
А почему? - Читай
Где можно? - Это уже обсуждалось...
Знаете с такими делами форум в зип.
Или тов. модераторы и всектовсезнает не мешайте делиться своим жалким опытом тем кто не родился с криком хело ворд!
 

Crazy

Developer
Рано. Может быть -- все же возьмет в руки учебник по информатике (не по PHP или MySQL)...
 

RomikChef

Guest
так вот как раз чтение у него и выхывает раздражение.
только на основании этих строк
Как сделать? - в ман.
А почему? - Читай
я и сделал свой вывод.
Как раз наличие или отсутствие знаний - не порок.
порок - отвращение к получению знаний. которое он старательно демонстрирует
 

Zaval

Новичок
Ладно можете между собой "пообщаться".

Я спросил - Profic ответил.
Я так и сделал.
Странно почему вы, всезнающие, не дали решения.
Перечитайте свои посты (не только мой топик).
Я улыбаюсь.

Ромик, с полгода тому назад с тобой можно было отлично общаться - сейчас нет. Ты устал от таких как я. Отдохни.
Я серьезно, тебя многое раздражает, особенно свойство человека, желание иметь много и с наименьшими усилиями.
 

Protoss

Guest
Ромик, с полгода тому назад с тобой можно было отлично общаться - сейчас нет. Ты устал от таких как я.
Порадовало - чел сам признался что за пол года у него "прогресса" в обучении почти не было :)
 

RomikChef

Guest
ROTFLMAO!!!!!

Zaval!!!
Как ты меня прадовал!!!:))))
мне регулярно, уже на протяжении трех лет, раз в полгода именно это самое и говорят!!! :))))
Спасибо, порадовал! :)))))

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

Crazy

Developer
На самом деле Crazy обожает (и умеет) хамить. Просто ему надоело. :)
 

Zaval

Новичок
Ну растрогали хоч в рукавычку плач, так лето скоро.
Нуу нету у меня вышки.
Так че все забить, к машине не подходи....
Тыж не знаешь как Клава команды ей отдает...
На монитор не смотри...
Х.....ер его знает какими лучами тебе по сетчаке.....
Вас послушать протосс etc так и не живи если говорить на пол года позжее начал....
 
Сверху