Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  04:34[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83728

07-05-2020 06:47
из БД MySQL из поля float(4,1) в MaskEdit заношу число 63,6. в MaskEdit-е вижу 63,5.
маска MaskEdit-а "00,0;1;_". одни числа отображаются корректно, другие изменяются на одну десятую
то вверх, то вниз.

как эту беду победить?

заношу в MaskEdit:

  MaskEdit5.Text := ADOQuery1.Fields[6].AsString;
  MaskEdit6.Text := KomaBeschriebRevers(ADOQuery1.Fields[7].AsString);


(процедура подменяет точку на запятую)

p.s. если число оканчивается на 0 (21,0), то 0 не отображается, хотя при просмотре
значений в БД с помощью MySQL-Front все числа вижу корректно.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

21-05-2020 09:11 | Комментарий к предыдущим ответам
Чисто для общего развития и маленький ликбез... В бухгалтерии, согласно приказа МинФин-а, свое округление... Суть которого в том, что типа в четных случаях округление в минус, в нечетных - в плюс. Есть даже всем известный парадокс (в инете можно найти) про "откуда рубль взялся". Т.е. если рассчитывается зарплата на сто человек, то нечетные по ведомости могут получить лишнюю копейку, а четные - такой возможности лишены...

18-05-2020 13:35 | Комментарий к предыдущим ответам
Да это понятно. Ног написать то все равно хочется :-)
А насчет бухгалтерии... настоящую официальную бухгалтерию не делал. Но вот когда для внутреннего использования делал систему распределения поступающих сумм на кучки в соответствии с набором формальных правил, то заранее оговорил точность расчетов и кучку, куда будут добавляться погрешности округления. Так что конфликтов не было.

18-05-2020 13:12 | Комментарий к предыдущим ответам
>>> А для типа currency сработает
А в бухгалтерии такие операции существуют? Обычно там всякие суммирования-вычитания, процентики... Главное - это копеечку не потерять в одну сторону. Помню, писал программу (на PHP правда), там протокол выводился с точностью до двух знаков (ну вполне логично, рубли-копейки), а вот в базе данных было что-то типа decimal(20,4), то есть 4 знака. И вот товарищи бухгалтера нашли (потому что они ВРУЧНУЮ ведомости пересчитывали), что кое где лишние копейки "набегают" из-за округления.
Так что для бухгалтерии в ЛЮБОМ случае нужно представление в "человекочитаемом" формате: 33 копейки (или 0,33 рубля). И обратно для человека должно появиться 99 копеек, а не рубль. Такие дела.

18-05-2020 06:17 | Комментарий к предыдущим ответам
А для типа currency сработает

a:=1;
a:=a/3;
a:=a*3;
if a=1 then ...


? ;-)

18-05-2020 01:21 | Комментарий к предыдущим ответам
>>> обусловленными использованием floating-point типов для подсчета денег
Ничего не понимаю. В Delphi есть специальный тип currency (ссылка на справку по последнему RAD Studio, но работает даже в Delphi 2006 точно, вроде как и в Delphi 7.0 было, в более старых точно не знаю). Поменять Double или Extended на Currency - это как два пальца. И ничего изобретать не надо, поддержка встроена. То есть использование самопальных типов (с учётом того, что перекрытие операторов в отличии от сишечки, в Delphi завезли буквально пару лет назад, да и то ограниченно) связано с некоторыми трудностями (надо пользоваться чем-то типа A.Add(B) вместо человеческого A+B), то для встроенного Currency этой проблемы даже быть не может!

17-05-2020 14:23 | Комментарий к предыдущим ответам
В случае чего вкладчики Сбера пострадают по-любому ;-)

А так, когда в очередной раз повозишься с ошибками округления, обусловленными использованием floating-point типов для подсчета денег, возникает дикое желание реализовать арифметику рациональных чисел. Честную... как учили: хранит два числа — числитель и знаменатель дроби. Числитель — целое, знаменатель — натуральное. По идее, для денег должно хватить, так как обычно при расчете сумм документов не используются ни корни, ни логарифмы.
Удерживает от данного шага только то, что все равно никто не будет переделывать программы на работу с новым типом данных.

16-05-2020 01:36 | Комментарий к предыдущим ответам
2 Python
Главное, чтобы ядреная станция не пострадала, ну и, есс-но, вкладчики Сбера.

15-05-2020 22:49 | Комментарий к предыдущим ответам
To Василий: Кстати, в некоторых скриптовых языках (например, AutoHotkey) совершенно случайно заметил такую штуку: числа с плавающей точной сравниваются знаком = совершенно корректно и, как бы это странно ни было, но код вида:

a:=1;
a:=a/3;
a:=a*3;
if a=3 then ...


работать будет (хотя в "честных" языках программирования - нет). Как "внутри" сделано - не знаю, но есть подозрение, что внутри всё хранится в виде строк, а как только происходит операция - строка автоматом конвертируется в подходящий тип данных.

12-05-2020 08:34 | Вопрос к автору: запрос дополнительной информации
Вы сформулируйте четко, чего добиться хотите. Просто заява одни числа отображаются корректно, другие изменяются на одну десятую то вверх, то вниз изначально тянет на клюкву. В статье Вам на пальцах пояснили, что есть число с плавающей запятой и корректные методы оценки величин этих чисел (применение знака "=" - это моветон).

11-05-2020 22:08 | Сообщение от автора вопроса
Василий, спасибо за ссылку.
в базе числа имеют формат float(4,1).
пока попробовал использовать FormatFloat, вроде ошибка перестала вылазить, но я не уверен, что это решение.

08-05-2020 13:49
А Вы храните все числа в integer или bigint-ах. А визуализацию делайте через IntToStr и вставляйте точку или запятую куда нужно...
А если реально хотите понять эти "фокусы", то Вам сюда - http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374 .

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Однажды, в студеную зимнюю пору я из лесу вышел, был сильный ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования