Автор Тема: 34.73 - 34.73 = 7.17721265656 E9  (Прочитано 5239 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн KPG

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« : 28 Ноября 2005, 21:43:08 »
Вот такая ерунда получается...
Грубо говоря есть следующее:

В базе данных есть две таблицы.
В одной таблице приход, в другой расход.
поле обозначающее приход/расход = decimal(7,2)

В таблице расход есть две суммы 5.00 и 29.73
В таблице приход одна сумма 34.73

По идее в итоге баланс должен быть 0.
Но у меня получается так, как в заголовке темы.

Причем:
1. Скрипт, который суммирует суммы в таблицах выдает для обоих таблиц суммы=34.73
2. Этот же скрипт при вычитании одной суммы из другой не выдает результат=0
3. Если в таблице расхода удалить эти две суммы и вписать всё одной суммой (34.73), то скрипт выдает разницу=0

В итоге:
1. Суммирование по таблице происходит правильно (выводятся обе суммы)
2. Скрипт считающий разницу между суммами в таблицах считает правильно
3. Всё это вместе не работает...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #1 : 28 Ноября 2005, 22:07:49 »
читай ман
про арифметику

Оффлайн KPG

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #2 : 28 Ноября 2005, 22:18:40 »
Спасибо! Очень остроумный ответ.
Если на всех форумах будут посылать на ман, то зачем тогда и форумы?

Проблему конечно решил: round(summa, 2)

Но вопрос остался:
Почему если в обоих таблицах одинаковые числа (34.73) (т.е. суммировать там нЕчего), то разница между ними считается правильно ( 34.73 - 34.73=0 ).
Но стОит только в одной из таблиц разбить это число на 5 и 29.73, то суммы в обоих таблицах совпадают (присваиваются переменным), а разница между ними уже не равна 0
(34.73 - (29.73+5) = -7.17721265656 E9) ?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #3 : 29 Ноября 2005, 01:32:53 »
Цитировать
KPG:
Если на всех форумах будут посылать на ман, то зачем тогда и форумы?

ты совершенно прав. форумы не нужны. нужен ман.

Цитировать
KPG:
Но вопрос остался:

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

Оффлайн KPG

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #4 : 29 Ноября 2005, 08:29:18 »
Не всегда есть возможность (или время или желание) изучать документацию...

А более конкретного ответа я и не ожидал от тебя услышать. Посмотрел по форуму - так у тебя одни ответы "читай ман" или "не так всё надо делать". Это очень содержательные и полезные ответы. Форум то вроде по PHP и создан насколько я понимаю как раз для обсуждения этого языка а не для отправления на ман...

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

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #5 : 29 Ноября 2005, 17:06:39 »
а я и делюсь своим опытом. ты разве не заметил? =)

Оффлайн 0b0rm0t

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #6 : 30 Ноября 2005, 10:23:22 »
Цитировать
KPG:
Форум то вроде по PHP и создан насколько я понимаю как раз для обсуждения этого языка а не для отправления на ман...


Имхо неправильно понимаешь. И вопрос твой имеет такое же отношение к php как и к любому другому языку.

По поводу проблемы: все правильно, так и должно быть. Решается округлением, что и было сделано.

Почему? Гугли на тему типов данных, числа с плавающей точкой.
Если голова болит, значит она есть.

Оффлайн KPG

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
34.73 - 34.73 = 7.17721265656 E9
« Ответ #7 : 30 Ноября 2005, 11:53:32 »
0b0rm0t
В данном контексте вопрос был привязан именно к PHP, но не сомневаюсь, что и к любому другому языку он может иметь такое же отношение...

По карйней мере, твой ответ был гораздо конкретнее и имел реальный смысл. За что и спасибо!

И посылание в гугл в твоем ответе имеет конкретный совет "числа с плавающей точкой", а не так "читай ман".
Вот это я имел в виду, когда отвечал на предыдущие сообщения.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28