Некоторые статистические данные, связанные с этим известным вопросом с двойной точностью.
При добавлении всех значений ( a + b ) с шагом 0,1 (от 0,1 до 100) имеем ~ 15% вероятность ошибки точности. Обратите внимание, что ошибка может привести к несколько большим или меньшим значениям. Вот несколько примеров:
0.1 + 0.2 = 0.30000000000000004 (BIGGER)
0.1 + 0.7 = 0.7999999999999999 (SMALLER)
...
1.7 + 1.9 = 3.5999999999999996 (SMALLER)
1.7 + 2.2 = 3.9000000000000004 (BIGGER)
...
3.2 + 3.6 = 6.800000000000001 (BIGGER)
3.2 + 4.4 = 7.6000000000000005 (BIGGER)
При вычитании всех значений ( a - b , где a> b ) с шагом 0,1 (от 100 до 0,1), мы имеем вероятность 34% точности. Вот несколько примеров:
0.6 - 0.2 = 0.39999999999999997 (SMALLER)
0.5 - 0.4 = 0.09999999999999998 (SMALLER)
...
2.1 - 0.2 = 1.9000000000000001 (BIGGER)
2.0 - 1.9 = 0.10000000000000009 (BIGGER)
...
100 - 99.9 = 0.09999999999999432 (SMALLER)
100 - 99.8 = 0.20000000000000284 (BIGGER)
* 15% и 34% действительно огромны, поэтому всегда используйте BigDecimal, когда точность имеет большое значение. С 2 десятичными цифрами (шаг 0,01) ситуация несколько ухудшается (18% и 36%).
Я создал несколько потоков в веб-приложении
blockquote>Я искренне надеюсь, что вы сделали правильный путь и таким образом, это не заканчивается эпической катастрофой.
Я хотел бы обновить таблицу автоматически, чтобы показать текущее состояние потока. Есть ли какой-либо компонент предварительной сборки, который я могу использовать в этом сценарии?
blockquote>Вы в основном ищете технику под названием «опрос» или «нажатие». Основная концепция опроса заключается в использовании JavaScript
setInterval()
илиsetTimeout()
для запуска HTTP-запроса (ajax) на сервер через интервалы времени и позволяет обрабатывать результаты соответствующим образом. Основная концепция pushing - открыть постоянное HTTP-соединение и передать серверу небольшие сообщения по нему, это можно сделать среди другихWebSocket
в JavaScript и JSR356 API в Java EE 7 .Стандартная реализация JSF не предлагает готового к использованию опроса или push-компонента из коробки. Для предстоящего JSF 2.3 в настоящее время выполняется новый тэг
<f:websocket>
(см. Также issue 1396 ).Лучше всего будет скрытая форма со скрытой ссылкой на команду / с помощью
<f:ajax>
, а затем вызовите его с помощьюsetInterval()
. Однако библиотеки компонентов, такие как PrimeFaces , предлагают готовые к использованию компоненты, см. Также<p:poll>
витрины и<p:push>
витрины для некоторых конкретные примеры. Библиотека утилиты JSF OmniFaces имеет в своем<o:commandScript>
витрине пример опроса и в<o:socket>
витрине несколько примеров нажатия (новый стандарт JSF<f:websocket>
будет в значительной степени базироваться на<o:socket>
).См. также: