Проблема в том, что двойное не так точно, как некоторые люди, возможно, заставили вас поверить.В вашем коде проблема основана на
int NumberOfCoins = (int)NumberOfMoney * 100;
, поскольку вывод этой операции - 114.999999999 ... Здесь есть 2 варианта, вы можете либо округлить операцию, используя Math.round
или используйте другой тип, который является более точным, но медленнее, например, BigDecimal
.
. Вы можете использовать BigDecimal, если вам нужна такая точность, но базовые операторы, такие как +,-,/*
, не существуют в BigDecimal, но вы можете использовать их методы * 1011.* и т. д.
Обновление 1:
Обзор кода
В идеале именование переменных должно начинаться со строчной буквы, а затем со всех следующих слов, начинающихся с заглавной буквы.например,
NumberOfMoney
должно быть numberOfMoney
NumberOfCoins
должно быть numberOfCoins
Имена можно улучшить, но на данный момент это нормально.
Если вы разделитеint
другим int
конечное значение всегда будет int
, нет необходимости его разыгрывать.
например,
//The following statements are equal
int NumberOfDollars = (int)(NumberOfCoins/100);
int NumberOfDollars = NumberOfCoins / 100;
Эта операция слишком сложна, и вы можете просто еще больше
//from
int NumberOfDollars = NumberOfCoins / 100;
NumberOfCoins = NumberOfCoins - 100 * NumberOfDollars;
//to
int NumberOfDollars = NumberOfCoins / 100;
NumberOfCoins = NumberOfCoins % 100;
Обновление 2:
Из правил, которые вы опубликовали, вы не следуете правилам 1,2 и 3. Для правила 1 он просит вас изолировать2 компонента строки.Первый компонент - это значения в долларах, а второй - значения в центах.
String amountValue = "1.15";
String dollaralue = "1" // you need to figure out how to do this.
String centValue = "15" // same
Для правила 2 проверьте документацию на Integer и, в частности, на parseInt.
Для правила 3 это приведение типов int NumberOfCoins = (int)(NumberOfMoney * 100);
.