В коде Java, где для представления цены используется двойное число, как лучше всего преобразовать двойное в длинное с ценовой шкалой 8? Например, {Double} 17.99 преобразуется в {Long} 1799000000. Двойной код может содержать от 2 до 4 десятичных знаков.
Простой код, такой как следующий, иногда работает правильно:
Double dprice = 17.99;
Long lprice = (long) (dprice * 100000000);
Однако по известным причинам ( руководство с плавающей запятой ) это может привести к неожиданному результату. Например, в одном тесте {Double} 17.99 преобразуется в {Long} 1798999999.
Каковы наилучшие варианты в Java для безопасного выполнения этого преобразования? Нужен ли BigDecimal в этом случае?