Да. Java удваивается, будет содержать их точность лучше, чем Ваш данный эпсилон 0,00001.
Любая погрешность округления, которая происходит из-за устройства хранения данных значений с плавающей точкой, произойдет меньшая, чем 0,00001. Я регулярно использую 1E-6
или 0.000001 для двойного эпсилона в Java без проблемы.
На связанной ноте, мне нравится формат epsilon = 1E-5;
, потому что я чувствую, что это более читаемо (1E-5 в Java = 1 x 10^-5). 1E-6 легко отличить от 1E-5 при чтении кода, тогда как 0,00001 и 0,000001 взгляда, настолько подобные при поглядывании на код, я думаю, что они - то же значение.
Вы НЕ используете дважды для представления денег. Не когда-либо. Используйте java.math.BigDecimal
вместо этого.
Тогда можно определить, как точно сделать округление (который иногда диктует закон в финансовых приложениях!) и не должны делать глупых взломов как эта вещь эпсилона.
Серьезно, с помощью типов с плавающей точкой для представления денег является чрезвычайно непрофессиональным.
Стоп стоп стоп. Существует ли определенная причина, которую Вы используете с плавающей точкой за валюту, или вещи были бы более обеспечены с произвольная точность, числовой формат фиксированной точки ? Я понятия не имею, какова определенная проблема, которую Вы пытаетесь решить, но необходимо думать о том, является ли половина цента действительно чем-то, что Вы хотите работать с, или если это - просто артефакт использования неточного числового формата.
Если Вы имеете дело с деньгами, я предлагаю проверить Денежный шаблон разработки (первоначально от книга Martin Fowler по архитектурному проекту предприятия).
я предлагаю читать эту ссылку для мотивации: http://wiki.moredesignpatterns.com/space/Value+Object+Motivation+v2
Центы? Если Вы - calculationg денежные значения, Вы действительно не должны использовать значения плавающие. Деньги являются на самом деле исчисляемыми значениями. Центы или пенсы и т.д. можно было считать двумя (или безотносительно) младшими значащими цифрами целого числа. Вы могли сохранить, и вычислить денежные значения как целые числа и разделиться на 100 (например, поместить точку или запятую два перед двумя последними цифрами). Используя плавание может привести к странным погрешностям округления...
Так или иначе, если Ваш эпсилон, как предполагается, определяет точность, это выглядит немного слишком маленьким (слишком точный)...
Числа с плавающей точкой только имеют столько значащих цифр, но они могут стать намного выше. Если Ваше приложение будет когда-либо обрабатывать большие количества, Вы заметите, что значение эпсилона должно отличаться.
0.001+0.001 = 0.002, НО 12,345,678,900,000,000,000,000+1=12,345,678,900,000,000,000,000, если Вы используете плавающую точку и дважды. Это не хорошее представление денег, если Вы не будете чертовски уверены, что никогда не будете обрабатывать больше чем миллион долларов в этой системе.