Шаблон BeanIO DoubleTypeHandler

Я использую этот шаблон:

<typeHandler name="dblHandler" class="org.beanio.types.DoubleTypeHandler">
        <property name="pattern" value="##0.0000000000;-#0.0000000000"/>
</typeHandler> 

Это преобразует число в 10 знаков после запятой. Однако, если число имеет 7 знаков после запятой, оно добавляет 3 конечных нуля. Как я могу изменить шаблон, чтобы не добавлять конечные 0.

Пример:

  • Если число 8,7829214389, то преобразование будет 8,7829214389.
  • Если число 8,7829214, то преобразование должно быть 8,7829214. Он преобразует его в: 8,7829214000.
  • Если число 8,7829, то преобразование должно быть 8,7829. Он преобразует его в: 8,7829000000.

Спасибо!


person saz    schedule 31.01.2018    source источник


Ответы (1)


Я быстро написал это, чтобы проверить DecimalFormat.

final DecimalFormat format = (DecimalFormat) NumberFormat.getInstance();
String pattern = "##0.0000000000;-#0.0000000000";
format.applyPattern(pattern);

System.out.println("Using pattern: " + pattern);
System.out.println("8.7829214389 = " + format.format(-8.7829214389));
System.out.println("8.7829214 = " + format.format(-8.7829214));
System.out.println("8.7829 = " + format.format(-8.7829));
System.out.println("8.123456789012 = " + format.format(-8.123456789012));
System.out.printf("%n");
System.out.println("-8.7829214389 = " + format.format(-8.7829214389));
System.out.println("-8.7829214 = " + format.format(-8.7829214));
System.out.println("-8.7829 = " + format.format(-8.7829));
System.out.println("-8.123456789012 = " + format.format(-8.123456789012));
System.out.printf("==========%n%n");

final DecimalFormat format2 = (DecimalFormat) NumberFormat.getInstance();
pattern = "##0.##########;-#0.##########";
format2.applyPattern(pattern);
System.out.println("Using pattern: " + pattern);
System.out.println("8.7829214389 = " + format2.format(8.7829214389));
System.out.println("8.7829214 = " + format2.format(8.7829214));
System.out.println("8.7829 = " + format2.format(8.7829));
System.out.println("8.123456789012 = " + format2.format(8.123456789012));
System.out.printf("%n");
System.out.println("-8.7829214389 = " + format2.format(-8.7829214389));
System.out.println("-8.7829214 = " + format2.format(-8.7829214));
System.out.println("-8.7829 = " + format2.format(-8.7829));
System.out.println("-8.123456789012 = " + format2.format(-8.123456789012));
System.out.printf("==========%n%n");

Создание этого вывода:

Using pattern: ##0.0000000000;-#0.0000000000
8.7829214389 = -8.7829214389
8.7829214 = -8.7829214000
8.7829 = -8.7829000000
8.123456789012 = -8.1234567890

-8.7829214389 = -8.7829214389
-8.7829214 = -8.7829214000
-8.7829 = -8.7829000000
-8.123456789012 = -8.1234567890
==========

Using pattern: ##0.##########;-#0.##########
8.7829214389 = 8.7829214389
8.7829214 = 8.7829214
8.7829 = 8.7829
8.123456789012 = 8.123456789

-8.7829214389 = -8.7829214389
-8.7829214 = -8.7829214
-8.7829 = -8.7829
-8.123456789012 = -8.123456789
==========

10 нулевых цифр после запятой в шаблоне заставляют средство форматирования всегда печатать 10 цифр после запятой. Если вы хотите напечатать только не более 10 цифр, используйте #, чтобы указать, что все цифры после запятой являются необязательными. См. документацию API Java для DecimalFormat. подробнее.

Следовательно, измените шаблон вашего обработчика типов следующим образом:

<typeHandler name="dblHandler" class="org.beanio.types.DoubleTypeHandler">
        <property name="pattern" value="##0.##########;-#0.##########"/>
</typeHandler> 
person nicoschl    schedule 31.01.2018
comment
Очень признателен!! - person saz; 31.01.2018