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

  • Автор темы Автор темы Zaval
  • Дата начала Дата начала

Zaval

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

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

Форматировать sprintf("%01.2f",$qqq) и т.д. считаю неразумно т.к. (В 99,9% это int.)
Чем это лечиться?
 
Десерт:
В поиске искал, в ответ тишина.
Все что нашел, это такие-же вопросы без ответа.
 
Прямого решения нет - можно только обойти такое поведение 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
Т.е. именно, то, что нужно :)
Количество знаков после запятой выбирается в зависимости от встречающихся чисел
 
Profic спасибо.
А ты не в курсе кто виноват и почему не исправят.
Я думаю не первый кто "напоролся" на это странное поведение float-ов
 
Да. Ты уже второй в этом году, кто занимается программированием, не имея понятия о том, как представлены в компьютере числа с плавающей точкой.

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

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

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

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

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

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

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

ЗЫ. Спасибо нашему техникумовскому преподу С, за то, что он усиленно нам это вдалбливал :) А потом еще вдалбливал и препод по Ассемблеру :)
 
Завальчик. разница между уровнем Крейзи и 99% посетителей данного форума действительно гигантская.
Было-бы странно если-бы 99% посетителей данного форума оказались гениями.
А резко высказался я по поводу поста Крейзи по причине...
Для начала, Крейзи ты просто под руку попал - сори.
Но люди обратите внимание на топики:
Как сделать? - в ман.
А почему? - Читай
Где можно? - Это уже обсуждалось...
Знаете с такими делами форум в зип.
Или тов. модераторы и всектовсезнает не мешайте делиться своим жалким опытом тем кто не родился с криком хело ворд!
 
Рано. Может быть -- все же возьмет в руки учебник по информатике (не по PHP или MySQL)...
 
так вот как раз чтение у него и выхывает раздражение.
только на основании этих строк
Как сделать? - в ман.
А почему? - Читай
я и сделал свой вывод.
Как раз наличие или отсутствие знаний - не порок.
порок - отвращение к получению знаний. которое он старательно демонстрирует
 
Ладно можете между собой "пообщаться".

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

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

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

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