This commit is contained in:
AKurakin 2023-09-13 14:03:35 +03:00
parent e2740347ba
commit 2d08c7d589
3 changed files with 47 additions and 3 deletions

View file

@ -4,6 +4,7 @@ import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFField;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.sdf.SDf54;
import ru.spcex.platform.utils.number.BigDecimalUtil;
import java.util.LinkedList;
import java.util.List;
@ -35,7 +36,7 @@ public class S_DF54_Converter extends DFConverter<SDf54> {
values.add(typeMatch(entity.getOp_order()));
values.add(typeMatch(entity.getPay_date()));
values.add(typeMatch(entity.getPay_val()));
values.add(typeMatch(entity.getSum_deb()));
values.add(typeMatch(BigDecimalUtil.limitDecimalPlaces(entity.getSum_deb(), 2, true)));
values.add(typeMatch(entity.getSclientn1()));
values.add(typeMatch(entity.getSclientn2()));
values.add(typeMatch(entity.getSclientn3()));
@ -60,7 +61,7 @@ public class S_DF54_Converter extends DFConverter<SDf54> {
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("SEG_TYPE", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("DOC_TYPE", DBFDataType.CHARACTER, 13));
dbfFields.add(new DBFField("DOC_TYPE", DBFDataType.CHARACTER, 4));
dbfFields.add(new DBFField("DOCNM_REF", DBFDataType.CHARACTER, 16));
dbfFields.add(new DBFField("DOCNMPREV", DBFDataType.CHARACTER, 16));
dbfFields.add(new DBFField("SBANKCODE", DBFDataType.CHARACTER, 12));

View file

@ -1,5 +1,6 @@
package ru.spcex.platform.utils.number;
import org.springframework.util.StringUtils;
import ru.spcex.platform.utils.text.TextUtil;
import java.math.BigDecimal;
@ -38,6 +39,14 @@ public class BigDecimalUtil {
* Для кейсов когда есть String поле с десятичной частью, и хотим ограничить число знаков после запятой
*/
public static String limitDecimalPlaces(String number, int decimalPlaces) {
return limitDecimalPlaces(number, decimalPlaces, false);
}
/**
* Для кейсов когда есть String поле с десятичной частью, и хотим ограничить число знаков после запятой
* @param fillZero - дополнить 0 если не хватает знаков дробной части
*/
public static String limitDecimalPlaces(String number, int decimalPlaces, boolean fillZero) {
if (number == null) {
return null;
}
@ -46,10 +55,20 @@ public class BigDecimalUtil {
}
int indexOfDot = number.lastIndexOf('.');
if (indexOfDot == -1 && (indexOfDot = number.lastIndexOf(',')) == -1) {
if (fillZero && decimalPlaces > 0) {
number += ".";
for (int i = 0; i < decimalPlaces; i++)
number += "0";
}
return number;
}
int maximumIndex = Math.min(number.length(), indexOfDot + decimalPlaces + 1);
return number.substring(0, maximumIndex);
number = number.substring(0, maximumIndex);
if (fillZero && decimalPlaces > 0) {
while (number.length() - indexOfDot <= decimalPlaces)
number += "0";
}
return number;
}
public static BigDecimal safeBD(BigDecimal bd) {

View file

@ -0,0 +1,24 @@
package ru.spcex.platform.utils.number;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class BigDecimalUtilTest {
@Test
void limitDecimalPlaces() {
Assertions.assertEquals("123.45", BigDecimalUtil.limitDecimalPlaces("123.45", 2));
Assertions.assertEquals("123.4", BigDecimalUtil.limitDecimalPlaces("123.45", 1));
Assertions.assertEquals("123.", BigDecimalUtil.limitDecimalPlaces("123.", 1));
Assertions.assertEquals("123", BigDecimalUtil.limitDecimalPlaces("123", 1));
Assertions.assertEquals("123.", BigDecimalUtil.limitDecimalPlaces("123.45", 0));
Assertions.assertEquals("123", BigDecimalUtil.limitDecimalPlaces("123", 0));
Assertions.assertEquals("123.41", BigDecimalUtil.limitDecimalPlaces("123.4123", 2, true));
Assertions.assertEquals("123.40", BigDecimalUtil.limitDecimalPlaces("123.4", 2, true));
Assertions.assertEquals("123.00", BigDecimalUtil.limitDecimalPlaces("123.", 2, true));
Assertions.assertEquals("123.00", BigDecimalUtil.limitDecimalPlaces("123", 2, true));
}
}