Конвертер валют в Java, имеющий проблемы с точностью и сокращением - PullRequest
0 голосов
/ 26 октября 2018

Я получил задание, которое должно быть написано на Java.

Мы должны разработать приложение для конвертации валют, в котором запрашивается валюта, из которой они конвертируются, количество указанной валюты и валюта, в которую они хотят конвертировать.

В инструкции указано, что мы должны включить 4 валюты для конвертации из / в.

Я выполнил задание рано и пошел показать профессору, и она заметила пару проблем с ним. Ей нравится организация и ясность кода, но она думает, что я могу сделать его немного меньше и исправить проблему, возникшую у меня, с десятичной точностью.

Что касается ее сокращения, ее основным аргументом было то, что у меня есть 7 констант, которые держат обменные курсы. Я горжусь этим, поскольку 7 ставок намного короче, чем 12 индивидуальных ставок для каждой возможной комбинации. Код ниже.

// Conversion Rates - START (as of October 14, 2018 @ 1:03 AM)
// Rates obtained from exchange-rates.org
private final double USD_TO_USD = 1;

//Convert to United States Dollars
private final double CAD_TO_USD = 0.76792;
private final double EUR_TO_USD = 1.1407;
private final double YEN_TO_USD = 0.008923;

//Convert from United States Dollars
private final double USD_TO_CAD = 1.3022;
private final double USD_TO_EUR = 0.87662;
private final double USD_TO_YEN = 112.06;
// Conversion Rates - END

Мой мыслительный процесс, лежащий в основе моей методологии, заключается в преобразовании всего в доллары США, а затем в доллары США в целевую валюту. Я не уверен в том, как это еще больше сократить, так что это одна из проблем, с которыми я сталкиваюсь.

Основная проблема, с которой я сталкиваюсь, - это точность. Поскольку занятия в основном основаны на бизнес-математике, программы обычно используются для конвертации миллионов / миллиардов валюты. Я знаю, что у double уже есть свои проблемы наследования с точностью, но я не уверен, какие другие типы данных использовать. Я столкнулся с BigDecimal, и я рассмотрю это после публикации этого.

Насколько я понимаю, количество десятичных знаков в обменном курсе напрямую влияет на точность результата. чем больше цифр справа от ставки; лучшее. Должен ли я иметь привычку включать очень большое количество десятичных знаков, чтобы было очень трудно иметь проблему точности? Или же использование BigDecimal обычно решает проблему.

Я решил отказаться от использования double и использовать вместо него int; так что вместо двойного удержания 5.00 я бы получил целое число 500; но на данный момент я не уверен в «правильном» способе продолжения.

Итак, я пришел спросить вас, прекрасные люди: D

Я рад узнать как можно больше, поэтому любая помощь приветствуется.

Спасибо

UPDATE: Я взял некоторое время, чтобы проверить BigDecimal, и я получил это работает; за исключением того, что я сейчас потерял сумму от 1 до 10 (может быть больше в очень очень больших числах, но я не проверял это более 5 раз с разными числами).

В моем тестировании я конвертировал 98765432,00 японских иен в доллары США по курсу 1 иена = 0,008907 долларов США. Согласно веб-сайту, который я использовал для проверки в то время, результат в долларах США должен составлять 879 701,24 долларов США; но я получаю $ 879 703,70 на моей программе. Даже мой научный калькулятор получает то же самое, что и моя Java-программа.

1 Ответ

0 голосов
/ 26 октября 2018

Просто продолжайте свой подход к реализации с BigDecimal, так как с BigDecimal вы не потеряете никакой точности, но с двойным есть шанс проиграть, когда вы имеете дело с большими числами.

Пожалуйста, пройдите черезниже ссылка на stackoverflow, чтобы получить больше информации о BigDecimal: Двойной против BigDecimal?

Вы на правильном пути, продолжайте качаться и счастливого обучения.

...