Десятичный тип данных pyxb теряет нули
Я заметил, что pyxb decimal
Тип данных не сохраняет конечные нули при рендеринге в XML. Виновником является призыв к normalize()
в следующей строке XsdLiteral
функция, в строке 159 из binding/datatypes.py
:
(sign, digits, exponent) = value.normalize().as_tuple()
(где value
это пример Python decimal
). Это небольшая проблема для меня, потому что веб-сервис, с которым я пытаюсь взаимодействовать, требует номера версии в форме X.000
и pyxb усекает это до X.0
,
Это ожидаемое поведение? или требуется по какому-то стандарту? Делают ли это и другие библиотеки, генерирующие XML-схемы? Мое решение сейчас заключается в использовании string
вместо этого, но код будет легко изменить, если он ничего не сломает.
2 ответа
Официальный ответ PyXB здесь, но из описания канонического представления десятичного значения xs:
Leading and trailing zeroes are prohibited subject to the following:
there must be at least one digit to the right and to the left of the
decimal point which may be a zero.
Также в описании самого десятичного числа:
Precision is not reflected in this value space; the number 2.0 is not
distinct from the number 2.00.
Поставщик услуг не соответствует требованиям, требуя предоставления конечных нулей.
У меня нет опыта работы с pyxb, но я предполагаю, что в целом нужно, чтобы XML был настолько компактным, насколько это возможно, чтобы сохранить память, и поэтому десятичные дроби усекаются, чтобы сохранить байты.
Кажется, это не совсем обычный случай использования десятичной дроби. Я понимаю, что десятичная дробь должна использоваться для хранения математических числовых значений, и поэтому усечение всегда возможно. Поскольку ваш случай является исключительным, модуль, вероятно, не был разработан, чтобы делать то, что вы хотите.