Made calculations more precise
This commit is contained in:
parent
4ed86f7420
commit
6e1fb749ad
@ -2,7 +2,7 @@ package de.vorsorge.theo.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.math.MathContext;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
@ -162,14 +162,13 @@ public class FabianUtil {
|
||||
@Override
|
||||
public void log() {
|
||||
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();
|
||||
|
||||
String remainingTimePart = "";
|
||||
if (counter.signum() != 0) {
|
||||
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);
|
||||
Duration timeToGo = Duration.of(secondsToGo.longValue(), ChronoUnit.SECONDS);
|
||||
remainingTimePart = ", " + formatDuration(timeToGo) + " verbleibend";
|
||||
|
@ -1,3 +1,5 @@
|
||||
import java.math.BigDecimal;
|
||||
import java.math.MathContext;
|
||||
import java.text.DecimalFormat;
|
||||
import java.time.LocalTime;
|
||||
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 int MIN_LUNCH_DURATION = 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 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 MathContext MC_INTEGER = new MathContext(1, RoundingMode.HALF_EVEN);
|
||||
|
||||
|
||||
private enum DaySection {
|
||||
@ -333,9 +336,11 @@ public class LoadingBar {
|
||||
|
||||
|
||||
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;
|
||||
int numberOfEquals = (int) wholePercentage;
|
||||
int numberOfEquals = wholePercentage.intValue();
|
||||
var sb = new StringBuilder("[");
|
||||
for (int i = 0; i < LINE_LENGTH; i++) {
|
||||
if (i < numberOfEquals) {
|
||||
@ -354,6 +359,9 @@ public class LoadingBar {
|
||||
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user