Ваше описание проблемы слишком искажено, чтобы быть точно понятным, но я постараюсь получить некоторую телепатию для этого.
Во внутреннем формате числа не содержат никакой информации о форматировании, как целые числа и числа с плавающей запятой. Для целого числа 123 нельзя восстановить, было ли оно представлено в виде "123"
, " 123 "
(с тоннами пробелов до и после него), 000000123
или +0123
. Для плавающего числа можно использовать 0.1
, +0.0001e00003
, 1.000000e-1
и множество других форм. Внутренне все они должны приводить к одному и тому же номеру.
(Есть некоторые особенности, когда вы используете IEEE754 «десятичное плавающее число», но я уверен, что это не ваш случай.)
При сохранении в базе данных внутреннее представление перестает иметь большой смысл. Вместо этого специфика базы данных начинает играть роль, и она может быть совершенно другой. Например, SQL предлагает использовать типы столбцов, такие как numeric(10,4)
, и каждое значение будет преобразовано в десятичный формат, соответствующий типу столбца (обычно сохраняется на диске в виде текстовой строки с десятичной точкой или без нее). В MongoDB вы можете хранить плавающее значение либо в виде числа JSON (IEEE754 double
), либо в виде текста. Каждый вариант имеет свою специфику, но если вы выбираете текст, вы несете ответственность за правильное форматирование каждый раз, когда формируете этот текст. Вы хотите увидеть десятичное число с фиксированной точкой с 8 цифрами после точки? Хорошо, никаких проблем: вы просто должны форматировать в соответствии с %.8f
при каждой подготовке такого представления.
Проблемы с выбором представления:
- Уникальность: никакие разные формы не должны быть доступны для одного и того же значения. В противном случае вы можете, например, сохранить одно и то же содержимое под несколькими ключами, а затем принять старое за последнее.
- Осведомленность о заказе: БД должна быть в состоянии обеспечить естественный порядок значений для запросов типа "пара ключ-значение потолка".
Если вы всегда форматируете значения, используя %.8f
, вы достигнете уникальности, но не упорядочения. То же самое для %.g
, %.e
и других текстовых форматов, за исключением специальных (не читаемых человеком), которые созданы для сохранения такого порядка. Если вам нужно упорядочить, просто используйте числа в качестве чисел и не концентрируйтесь на том, как они выглядят в текстовых формах.
(И ваша проблема не связана с numpy.)