Skip to content
Snippets Groups Projects
Commit eb6dfd18 authored by Blersch Lara's avatar Blersch Lara
Browse files

changed double to BigDecimal in NutritionTableCalculator

parent f8c0959e
No related branches found
No related tags found
No related merge requests found
...@@ -23,15 +23,15 @@ public class NutritionCalculator { ...@@ -23,15 +23,15 @@ public class NutritionCalculator {
return NutritionTable.empty(); return NutritionTable.empty();
} }
double totalCals = 0, BigDecimal totalCals = BigDecimal.ZERO,
totalCarbs = 0, totalCarbs = BigDecimal.ZERO,
totalFats = 0, totalFats = BigDecimal.ZERO,
totalProteins = 0, totalProteins = BigDecimal.ZERO,
totalFibers = 0, totalFibers = BigDecimal.ZERO,
totalSalt = 0; totalSalt = BigDecimal.ZERO;
for (RecipeComponent entry : ingredients.keySet()) { for (RecipeComponent entry : ingredients.keySet()) {
//TODO: adjust to change in NutritionTable: double -> BigDecimal
final Map<Nutrition, BigDecimal> nutritionTable = entry.getNutritionTable().getTable(); final Map<Nutrition, BigDecimal> nutritionTable = entry.getNutritionTable().getTable();
int divisor; int divisor;
...@@ -40,15 +40,15 @@ public class NutritionCalculator { ...@@ -40,15 +40,15 @@ public class NutritionCalculator {
} else { } else {
divisor = 100; divisor = 100;
} }
totalCals += nutritionTable.get(Nutrition.CALORIES).doubleValue() * ingredients.get(entry) / divisor; totalCals = totalCals.add(nutritionTable.get(Nutrition.CALORIES).multiply(BigDecimal.valueOf(ingredients.get(entry))).divide(BigDecimal.valueOf(divisor)));
totalCarbs += nutritionTable.get(Nutrition.CARBS).doubleValue() * ingredients.get(entry) / divisor; totalCarbs = totalCarbs.add(nutritionTable.get(Nutrition.CARBS).multiply(BigDecimal.valueOf(ingredients.get(entry))).divide(BigDecimal.valueOf(divisor)));
totalFats += nutritionTable.get(Nutrition.FAT).doubleValue() * ingredients.get(entry) / divisor; totalFats = totalFats.add(nutritionTable.get(Nutrition.FAT).multiply(BigDecimal.valueOf(ingredients.get(entry))).divide(BigDecimal.valueOf(divisor)));
totalProteins += nutritionTable.get(Nutrition.PROTEINS).doubleValue() * ingredients.get(entry) / divisor; totalProteins = totalProteins.add(nutritionTable.get(Nutrition.PROTEINS).multiply(BigDecimal.valueOf(ingredients.get(entry))).divide(BigDecimal.valueOf(divisor)));
totalFibers += nutritionTable.get(Nutrition.FIBERS).doubleValue() * ingredients.get(entry) / divisor; totalFibers = totalFibers.add(nutritionTable.get(Nutrition.FIBERS).multiply(BigDecimal.valueOf(ingredients.get(entry))).divide(BigDecimal.valueOf(divisor)));
totalSalt += nutritionTable.get(Nutrition.SALT).doubleValue() * ingredients.get(entry) / divisor; totalSalt = totalSalt.add(nutritionTable.get(Nutrition.SALT).multiply(BigDecimal.valueOf(ingredients.get(entry))).divide(BigDecimal.valueOf(divisor)));
} }
log.info("NutritionTable calculated successfully."); log.info("NutritionTable calculated successfully.");
return new NutritionTable(totalCals, totalCarbs, totalFats, totalProteins, totalFibers, totalSalt); return new NutritionTable(totalCals.doubleValue(), totalCarbs.doubleValue(), totalFats.doubleValue(), totalProteins.doubleValue(), totalFibers.doubleValue(), totalSalt.doubleValue());
} }
...@@ -63,6 +63,7 @@ public class NutritionCalculator { ...@@ -63,6 +63,7 @@ public class NutritionCalculator {
totalFibers = 0, totalFibers = 0,
totalSalt = 0; totalSalt = 0;
//we calculate with double -> still rounding errors! that's why testCalculateNutritionTableFromIngredients failes
for (Recipe r : plan.values()) { for (Recipe r : plan.values()) {
final Map<Nutrition, BigDecimal> nutritionTable = r.getNutritionTable().getTable(); final Map<Nutrition, BigDecimal> nutritionTable = r.getNutritionTable().getTable();
totalCals += nutritionTable.get(Nutrition.CALORIES).doubleValue(); totalCals += nutritionTable.get(Nutrition.CALORIES).doubleValue();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment