runden von beträgen

This commit is contained in:
Ralph Soika 2023-03-15 11:44:12 +01:00
parent 41c6ac7cbf
commit a739c0ddac
4 changed files with 87 additions and 4 deletions

12
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,12 @@
{
// Wildfly Debug Configuration
"configurations": [
{
"type": "java",
"name": "Debug Wildfly",
"request": "attach",
"hostName": "localhost",
"port": "8787"
}
]
}

View file

@ -1,10 +1,28 @@
package com.alexanderlogistics; package com.alexanderlogistics;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* Rundungs Methode
*
* See: https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places
*
* @author rsoika
*
*/
public class InvoiceUtil { public class InvoiceUtil {
public static double round(double value) { public static double round(double value) {
BigDecimal bd = BigDecimal.valueOf(value);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.doubleValue();
}
@Deprecated
public static double roundConservative(double value) {
value = value * 100; value = value * 100;
long tmp = Math.round(value); long tmp = Math.round(value);
return (double) tmp / 100; return (double) tmp / 100;
} }
} }

View file

@ -89,7 +89,6 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED,
"Der Zahlungseingang ist nicht identisch mit den ausgebuchten Rechnungssalden. Sollte die Eingabe korrekt sein, wiederholen Sie die Aktion."); "Der Zahlungseingang ist nicht identisch mit den ausgebuchten Rechnungssalden. Sollte die Eingabe korrekt sein, wiederholen Sie die Aktion.");
} }
} }
@ -127,7 +126,7 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
// vergeiche Restsaldo mit payment für diese Rechnung // vergeiche Restsaldo mit payment für diese Rechnung
if (Math.abs(invoicePaymentAmount) > Math.abs(InvoiceUtil.round(invoiceSaldo))) { if (Math.abs(InvoiceUtil.round(invoicePaymentAmount)) > Math.abs(InvoiceUtil.round(invoiceSaldo))) {
throw new PluginException(PluginException.class.getName(), throw new PluginException(PluginException.class.getName(),
ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED, ZahlungseingangService.ERROR_PAYMENT_BOOKING_FAILED,
"Der Zahlungseingang kann nicht verbucht werden, da der Restsaldo der Rechnung " "Der Zahlungseingang kann nicht verbucht werden, da der Restsaldo der Rechnung "
@ -138,7 +137,7 @@ public class ZahlungseingangSaldoAdapter implements SignalAdapter {
invoiceSaldo = invoiceSaldo - invoicePaymentAmount; invoiceSaldo = invoiceSaldo - invoicePaymentAmount;
invoiceSaldo=(float) InvoiceUtil.round(invoiceSaldo);
invoice.setItemValue("invoice.saldo", invoiceSaldo); invoice.setItemValue("invoice.saldo", invoiceSaldo);
invoice.event(ZahlungseingangService.EVENT_UPDATE_INVOICE); invoice.event(ZahlungseingangService.EVENT_UPDATE_INVOICE);
zahlungseingangService.processInvoice(invoice); zahlungseingangService.processInvoice(invoice);

View file

@ -0,0 +1,54 @@
package com.alexanderlogistics;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.imixs.workflow.datev.imports.DatevImportAdapter;
import org.junit.Before;
import org.junit.Test;
import junit.framework.Assert;
/**
* This test generates random test data
*
* @author rsoika
*
*/
public class TestRunden {
public static DateFormat dateFormat = new SimpleDateFormat("ddMMyyyy");
public static DecimalFormat decimalFormat = new DecimalFormat("0.00");
public static DecimalFormat rateFormat = new DecimalFormat("0.000000");
private final static Logger logger = Logger.getLogger(TestFormat.class.getName());
@Before
public void setUp() throws Exception {
}
@Test
public void testBetrag() {
double d1 = 915.1400000000001;
double d2 = 915.1400000000002;
logger.info("d1="+d1);
logger.info("d2="+d2);
logger.info("d1="+InvoiceUtil.round(d1));
logger.info("d2="+InvoiceUtil.round(d2));
if (Math.abs(InvoiceUtil.round(d1)) > Math.abs(InvoiceUtil.round(d2))) {
Assert.fail();
}
logger.info("Test erfolgreich");
}
}