Как обрабатывать маршрутизацию чисел в системах

#decimal #software-design

Вопрос:

Мы можем рассматривать Java как перспективу. Предположим, у нас есть система, в которой есть товары с определенной ценой. Цена потребует нескольких операций, скажем, 15 операций. цена товаров будет делиться, умножаться, суммироваться, вычитаться с десятичными дробями снова и снова. Знайте, допустим, что наша система разговаривает с другой системой. Эта другая система также выполняет операции по снижению цен. В конце концов, значения цен двух систем должны точно совпадать(центы). Мы гипотетически говорим о системах бухгалтерского учета. По моему опыту, шансы на два матча очень редки. Как мы можем справиться с такой ситуацией? Существует ли правило округления?

Ответ №1:

Я бы сказал, что всегда вычисляйте с помощью необработанных чисел (т. Е. Большого количества десятичных знаков) и также переносите это число. Только для раунда сравнения с менее точной, ранее согласованной степенью точности (которая все еще достаточно точна для этой цели). Таким образом, у вас будут совпадающие результаты при сохранении достаточно высокой точности.
Фактор, который следует учитывать, — это метод округления, если одна сторона может отличаться. Есть три, о которых я знаю:

  • Тот, который преподается в школе: 0,5 —gt; 1,0
  • К нулю: 1,5 —gt; 1,0, но -2,5 —gt;gt; -2,0
  • В сторону четности, также называемой «округлением банкира»: 1,5 -gt; 2,0, но 2,5 -gt;gt; 2,0