Как обрабатывать сантиметр от / до дюймов
У меня есть международное приложение, которое обрабатывает длины и веса людей, и хранит их в базе данных. Мне было интересно, как с этим справиться, если пользователи могут переключаться между использованием сантиметров / дюймов в приложении.
Я думал всегда использовать сантиметры в базе данных и конвертировать в дюймы, если пользователь решил использовать дюймы. Но, конечно, если пользователь вводит длину в дюймах, и она преобразуется и сохраняется в сантиметрах, значение может немного измениться из-за ошибок округления.
Как бы вы справились с этим сценарием?
Спасибо л
7 ответов
В вашем вопросе есть много вопросов, помимо имеющейся информации. Прежде чем принять решение о том, как хранить и преобразовывать информацию, вы должны знать, какая у вас допустимая ошибка. Например, если вы рассчитываете траекторию для перехвата входящей ракеты с другой ракетой, для достижения успеха необходима чрезвычайно маленькая точность. Если это медицинское применение и оно используется для точного контроля рецептуры лекарственного средства, может быть важнее быть точным, чем если бы вы просто рассчитывали ИМТ.
Короче говоря, выберите стандарт, будь то метрический или другой, и придерживайтесь его для своего типа хранения. в зависимости от требуемой точности выберите наименьшую единицу измерительной системы, которая обеспечит вам необходимую точность. Все показы единиц другой системы измерения будут преобразованы из этого базового измерения.
И постарайтесь не перегружать решение. Если, очевидно, не будет важно отмерить до 52 знаков после запятой, вы тратите впустую усилия и вводите ненужные осложнения, объясняющие этот сценарий.
Таким образом, вы будете иметь ошибки округления, если вы конвертируете из сантиметров в дюймы и если вы конвертируете из сантиметров в дюймы. Проблема будет одинаковой, независимо от того, что вы храните в БД.
Вы можете хранить значения не в сантиметрах в базе данных, а в миллиметрах. Поэтому я думаю, насколько меньше устройство, тем точнее оно будет, даже в случае конвертации.
Лично я бы использовал один из двух методов.
- Всегда храните его в одной и той же единице измерения
- Сохраните единицу измерения в отдельном поле, чтобы вы знали, является ли единица измерения CM или дюймами.
Я предпочитаю первый метод, поскольку он облегчает обработку.
Если один и тот же пользователь должен иметь возможность переключаться во внешнем интерфейсе, вам непременно следует сохранить одно поле, представляющее значение, в одной единице, которую вы определили, потому что ошибки округления все равно будут иметь место.
Если у вас есть группа пользователей, имеющая дело только с дюймами, а другая - только с сантиметрами, и у каждой из этих групп есть одна база данных или, как минимум, "собственные значения", выберите два поля: значение / единица (например, одно и то же программное обеспечение, другой клиент установка в разных странах)
Я бы сохранял значения с плавающей запятой, представляющие, например, микрометры (с 32-разрядным без знака вы можете представлять все от 4,2 км до 0,001 мм).
Мы можем сделать задачу очень просто. У нас есть только коэффициент для преобразования дюймов в см, а все вычисления и результат мы не сохранили в БД. Мы можем только умножить или разделить число на соотношение и получим результат. Так что если у вас см, нужно умножить соотношение и получить результат. Вы можете увидеть, как это работает, на примере, который я нашел за 2 минуты: http://inchpro.com/metric-system/convert-inches-to-centimeters Я думаю, вы знаете, что хранение всех значений в базе данных занимает много пространства.
В зависимости от того, что вы собираетесь делать с этими значениями (нужно ли много агрегировать на уровне БД и т. Д.), Лучший способ убедиться в отсутствии кумулятивной ошибки округления - это сохранить в исходной единице измерения эта единица измерения (id) в отдельном столбце и имеет отдельную таблицу преобразования, которую вы используете для оперативных вычислений при сравнении, агрегировании и т. д.
Однако это не будет сверхэффективным или удобным: вам всегда нужно будет присоединиться к таблице преобразования, прежде чем выполнять какую-либо работу с сохраненными значениями.
Не уверен, зачем вам нужна база данных, если вы не сохраняли свои показатели конверсии
Там не было бы никакого способа уничтожить метрические или имперские, потому что они просто числа
Ваши ошибки округления будут происходить в соответствии со степенью точности, которую вы хотите отобразить....