Я работаю над простым транзакционным проектом и впервые пишу на Java, так что вот фрагменты:
private static void loadHistory(List<Transaction> transactions) {
double totalDebitCount = calculateTotalCountByType(transactions, TransactionType.DEBIT);
double totalCreditCount = calculateTotalCountByType(transactions, TransactionType.CREDIT);
System.out.println("There are " + totalCreditCount + "transactions in the database");
System.out.println();
for (Transaction transaction: transactions) {
System.out.println(transaction.toString());
}
System.out.println();
System.out.println("Total count for all debit transactions is" + totalDebitCount);
System.out.println("Total count for all credit transactions is " + totalCreditCount);
}
и второй:
public static double calculateTotalCountByType(List<Transaction> transactions, TransactionType type) {
double total = 0;
for (Transaction transaction: transactions) {
if (transaction.type == type) {
total = total + transaction.quantity * transaction.exchangeRate;
}
}
return total;
}
кстати, мне вообще не нужен exchangeRate*quantity так что его можно просто вырезать
Решение проблемы
Ваш код в настоящее время вычисляет сумму сумм транзакций по типу
total = total + transaction.quantity; // Ignoring exchange rate
Если все, что вы хотите, имеет значение, это должно быть
total = total + 1
и возвращаемое значение должно быть int
, а не double
.
Боковое примечание: НИКОГДА не используйте плавающую точку для финансовых сумм. Плавающая точка страдает от потери точности в некоторых операциях. ВСЕГДА используйте формат без потерь, такой как BigDecimal
.
Комментариев нет:
Отправить комментарий