Made calculations more precise
This commit is contained in:
		@@ -2,7 +2,7 @@ package de.vorsorge.theo.util;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
import java.math.RoundingMode;
 | 
					import java.math.MathContext;
 | 
				
			||||||
import java.nio.charset.StandardCharsets;
 | 
					import java.nio.charset.StandardCharsets;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Paths;
 | 
					import java.nio.file.Paths;
 | 
				
			||||||
@@ -162,14 +162,13 @@ public class FabianUtil {
 | 
				
			|||||||
      @Override
 | 
					      @Override
 | 
				
			||||||
      public void log() {
 | 
					      public void log() {
 | 
				
			||||||
         BigDecimal counter = getCounter();
 | 
					         BigDecimal counter = getCounter();
 | 
				
			||||||
         BigDecimal percentage = BigDecimal.valueOf(100).divide(total, 15, RoundingMode.HALF_UP).multiply(counter);
 | 
					         BigDecimal percentage = BigDecimal.valueOf(100).divide(total, MathContext.DECIMAL64).multiply(counter);
 | 
				
			||||||
 | 
					 | 
				
			||||||
         Duration timePassed = getTimePassed();
 | 
					         Duration timePassed = getTimePassed();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         String remainingTimePart = "";
 | 
					         String remainingTimePart = "";
 | 
				
			||||||
         if (counter.signum() != 0) {
 | 
					         if (counter.signum() != 0) {
 | 
				
			||||||
            BigDecimal secondsPassed = BigDecimal.valueOf(timePassed.getSeconds());
 | 
					            BigDecimal secondsPassed = BigDecimal.valueOf(timePassed.getSeconds());
 | 
				
			||||||
            BigDecimal totalSeconds = secondsPassed.divide(counter, 15, RoundingMode.HALF_UP).multiply(total);
 | 
					            BigDecimal totalSeconds = secondsPassed.divide(counter, MathContext.DECIMAL64).multiply(total);
 | 
				
			||||||
            BigDecimal secondsToGo = totalSeconds.subtract(secondsPassed);
 | 
					            BigDecimal secondsToGo = totalSeconds.subtract(secondsPassed);
 | 
				
			||||||
            Duration timeToGo = Duration.of(secondsToGo.longValue(), ChronoUnit.SECONDS);
 | 
					            Duration timeToGo = Duration.of(secondsToGo.longValue(), ChronoUnit.SECONDS);
 | 
				
			||||||
            remainingTimePart = ", " + formatDuration(timeToGo) + " verbleibend";
 | 
					            remainingTimePart = ", " + formatDuration(timeToGo) + " verbleibend";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					import java.math.MathContext;
 | 
				
			||||||
import java.text.DecimalFormat;
 | 
					import java.text.DecimalFormat;
 | 
				
			||||||
import java.time.LocalTime;
 | 
					import java.time.LocalTime;
 | 
				
			||||||
import java.time.format.DateTimeFormatter;
 | 
					import java.time.format.DateTimeFormatter;
 | 
				
			||||||
@@ -19,11 +21,12 @@ public class LoadingBar {
 | 
				
			|||||||
   private static final DecimalFormat PERCENTAGE_FORMAT = new DecimalFormat("00.00");
 | 
					   private static final DecimalFormat PERCENTAGE_FORMAT = new DecimalFormat("00.00");
 | 
				
			||||||
   private static final int MIN_LUNCH_DURATION = 30;
 | 
					   private static final int MIN_LUNCH_DURATION = 30;
 | 
				
			||||||
   private static final LocalTime LATEST_LUNCH_TIME = LocalTime.of(13, 30);
 | 
					   private static final LocalTime LATEST_LUNCH_TIME = LocalTime.of(13, 30);
 | 
				
			||||||
   private static final long DEFAULT_NUMBER_WORK_MINS_BEFORE_LUNCH = 5L * 60;
 | 
					 | 
				
			||||||
   private static final int MAX_NUMBER_WORK_MINS_WITHOUT_LUNCH = 6 * 60;
 | 
					 | 
				
			||||||
   private static final long MAX_NUMBER_WORK_MINS = 8L * 60;
 | 
					 | 
				
			||||||
   private static final int MINS_PER_HOUR = 60;
 | 
					   private static final int MINS_PER_HOUR = 60;
 | 
				
			||||||
 | 
					   private static final long DEFAULT_NUMBER_WORK_MINS_BEFORE_LUNCH = 5L * MINS_PER_HOUR;
 | 
				
			||||||
 | 
					   private static final int MAX_NUMBER_WORK_MINS_WITHOUT_LUNCH = 6 * MINS_PER_HOUR;
 | 
				
			||||||
 | 
					   private static final long MAX_NUMBER_WORK_MINS = 8L * MINS_PER_HOUR;
 | 
				
			||||||
   private static final int LINE_LENGTH = 100;
 | 
					   private static final int LINE_LENGTH = 100;
 | 
				
			||||||
 | 
					   private static final MathContext MC_INTEGER = new MathContext(1, RoundingMode.HALF_EVEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private enum DaySection {
 | 
					   private enum DaySection {
 | 
				
			||||||
@@ -333,9 +336,11 @@ public class LoadingBar {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private static String fillLoadingBar(long initialMinutes, long passedMinutes, boolean progressive) {
 | 
					   private static String fillLoadingBar(long initialMinutes, long passedMinutes, boolean progressive) {
 | 
				
			||||||
      double wholePercentage = ((double) passedMinutes / initialMinutes) * 100;
 | 
					      BigDecimal wholePercentage = BigDecimal.valueOf(100)
 | 
				
			||||||
 | 
					         .divide(BigDecimal.valueOf(initialMinutes), MathContext.DECIMAL64)
 | 
				
			||||||
 | 
					         .multiply(BigDecimal.valueOf(passedMinutes));
 | 
				
			||||||
      long remainingMinutes = initialMinutes - passedMinutes;
 | 
					      long remainingMinutes = initialMinutes - passedMinutes;
 | 
				
			||||||
      int numberOfEquals = (int) wholePercentage;
 | 
					      int numberOfEquals = wholePercentage.intValue();
 | 
				
			||||||
      var sb = new StringBuilder("[");
 | 
					      var sb = new StringBuilder("[");
 | 
				
			||||||
      for (int i = 0; i < LINE_LENGTH; i++) {
 | 
					      for (int i = 0; i < LINE_LENGTH; i++) {
 | 
				
			||||||
         if (i < numberOfEquals) {
 | 
					         if (i < numberOfEquals) {
 | 
				
			||||||
@@ -354,6 +359,9 @@ public class LoadingBar {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private static String minutesToTimeString(long minutes) {
 | 
					   private static String minutesToTimeString(long minutes) {
 | 
				
			||||||
      return LocalTime.of((int) minutes / MINS_PER_HOUR, (int) minutes % MINS_PER_HOUR).format(TIME_FORMATTER);
 | 
					      var minutesBD = BigDecimal.valueOf(minutes);
 | 
				
			||||||
 | 
					      int hours = minutesBD.divide(BigDecimal.valueOf(MINS_PER_HOUR), MC_INTEGER).intValue();
 | 
				
			||||||
 | 
					      int rest_minutes = minutesBD.remainder(BigDecimal.valueOf(MINS_PER_HOUR), MC_INTEGER).intValue();
 | 
				
			||||||
 | 
					      return LocalTime.of(hours, rest_minutes).format(TIME_FORMATTER);
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user