2014-02-21 4 views
0

В настоящее время я работаю над переделкой старой программы выставления счетов, которая была первоначально написана на VB6.
Он состоит из двух частей: один на планшете Android, другой на ПК. В старой базе данных использовались сохраненные производные значения, поскольку вероятность повторения вычислений была бы неправильной. Например, если продано 5 предметов, цена которых составляла 10 евро со скидкой 10% и налоговой стоимостью 23%, она сохранила бы вышеуказанные 4 значения, а также результат калибровки (5 * (10 * 1,23)) * 0,9.
Мне не очень нравится иметь дублирующую или выводимую информацию в моей базе данных, но фактическая стоимость продажи должна быть одинаковой, будь то на планшете или на ПК.
Итак, мой вопрос в том, есть ли шанс (даже малейший), что вышеупомянутое отклонение (до трех десятичных значений) будет иметь разные результаты в разных операционных системах (например, Android-устройство и настольный компьютер)?
Заранее благодарим за любую помощь, которую вы можете предоставитьНасколько вероятно, что два точных вычисления дают разные результаты?

ответ

0

Да, это возможно. Арифметика с плавающей точкой всегда подвержена ошибкам округления, и разные языки (и архитектуры) обрабатывают эти ошибки по-разному. Есть лучшие практики в решении этих вопросов, хотя я не считаю себя достаточно осведомленным, чтобы говорить с ними. Но вот несколько вариантов для вас.

  1. Используйте тип данных, предназначенный для арифметики с плавающей запятой. Например, VB6 имеет тип Single и Double для с плавающей запятой, а также тип валюты для точной десятичной математики.
  2. Масштабируйте значения с плавающей запятой целыми числами и выполняйте вычисления по этим целочисленным значениям. Вы даже можете хранить результаты как целые числа в своей БД. Используемая нами ERP-система делает это и включает словарь данных, который определяет, как каждый тип был масштабирован, чтобы он мог быть «немасштабирован» перед отображением.

Надеюсь, что это поможет.

Смежные вопросы