Вот как я это делаю:
str(1).zfill(len(str(total)))
В основном zfill занимает число ведущих нулей, которые вы хотите добавить, поэтому легко взять самое большое число, превратить его в строку и получить длина, например:
Python 3.6.5 (default, May 11 2018, 04:00:52) [GCC 8.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> total = 100 >>> print(str(1).zfill(len(str(total)))) 001 >>> total = 1000 >>> print(str(1).zfill(len(str(total)))) 0001 >>> total = 10000 >>> print(str(1).zfill(len(str(total)))) 00001 >>>
Feature.WRITE_BIGDECIMAL_AS_PLAIN установить это для вашего объекта Mapper
Я думаю, что это проблема Java. Если вы отлаживаете свою программу, ваш Double будет всегда отображаться с научной точки зрения, поэтому мы хотим, чтобы он был в String. Это может быть достигнуто на Java несколькими способами, и вы можете найти его здесь:
Как печатать двойное значение без научной нотации с использованием Java?
Что касается вашего конкретного вопроса о Jackson, я написал для вас код:
public class ObjectMapperTest {
public static void main(String[] args) throws JsonProcessingException {
IntegerSchema schema = new IntegerSchema();
schema.type = "Int";
schema.max = 10200000000d;
schema.min = 100d;
ObjectMapper m = new ObjectMapper();
System.out.println(m.writeValueAsString(schema));
}
public static class IntegerSchema {
@JsonProperty
String type;
@JsonProperty
double min;
@JsonProperty
@JsonSerialize(using=MyDoubleDesirializer.class)
double max;
}
public static class MyDoubleDesirializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
// TODO Auto-generated method stub
BigDecimal d = new BigDecimal(value);
gen.writeNumber(d.toPlainString());
}
}
}
Трюк заключается в регистрации пользовательского Serializer для вашего двойного значения. Таким образом, вы можете контролировать то, что хотите.
Я использую значение BigDecimal для создания строкового представления вашего Double. Затем выход будет (для конкретного примера):
{"type":"Int","min":100.0,"max":10200000000}
Надеюсь, что это решает вашу проблему.
Artur