В настоящее время я работаю над переделкой старой программы выставления счетов, которая была первоначально написана на VB6.
Он состоит из двух частей: один на планшете Android, другой на ПК. В старой базе данных использовались сохраненные производные значения, поскольку вероятность повторения вычислений была бы неправильной. Например, если продано 5 предметов, цена которых составляла 10 евро со скидкой 10% и налоговой стоимостью 23%, она сохранила бы вышеуказанные 4 значения, а также результат калибровки (5 * (10 * 1,23)) * 0,9.
Мне не очень нравится иметь дублирующую или выводимую информацию в моей базе данных, но фактическая стоимость продажи должна быть одинаковой, будь то на планшете или на ПК.
Итак, мой вопрос в том, есть ли шанс (даже малейший), что вышеупомянутое отклонение (до трех десятичных значений) будет иметь разные результаты в разных операционных системах (например, Android-устройство и настольный компьютер)?
Заранее благодарим за любую помощь, которую вы можете предоставитьНасколько вероятно, что два точных вычисления дают разные результаты?
0
A
ответ
0
Да, это возможно. Арифметика с плавающей точкой всегда подвержена ошибкам округления, и разные языки (и архитектуры) обрабатывают эти ошибки по-разному. Есть лучшие практики в решении этих вопросов, хотя я не считаю себя достаточно осведомленным, чтобы говорить с ними. Но вот несколько вариантов для вас.
- Используйте тип данных, предназначенный для арифметики с плавающей запятой. Например, VB6 имеет тип Single и Double для с плавающей запятой, а также тип валюты для точной десятичной математики.
- Масштабируйте значения с плавающей запятой целыми числами и выполняйте вычисления по этим целочисленным значениям. Вы даже можете хранить результаты как целые числа в своей БД. Используемая нами ERP-система делает это и включает словарь данных, который определяет, как каждый тип был масштабирован, чтобы он мог быть «немасштабирован» перед отображением.
Надеюсь, что это поможет.
Смежные вопросы
- 1. Почему два вычисления дают разные ответы?
- 2. Почему два интерпретатора дают разные результаты?
- 3. Два похожих запроса MySQL дают разные результаты
- 4. Почему эти два запроса дают разные результаты?
- 5. Почему два sql дают разные результаты?
- 6. Javascript OOP. Почему эти два почти точных заявления дают разные результаты?
- 7. Numpy против Python вычисления с плавающей запятой дают разные результаты
- 8. Почему эти два сегмента кода дают мне разные результаты?
- 9. Почему эти функции Javascript дают разные результаты?
- 10. javascript loops дают разные результаты
- 11. Почему эти два вычисления точно так же дают разные результаты в Fortran с помощью gfortran?
- 12. Почему эти два Свободных nHibernate-запроса дают разные результаты?
- 13. Почему эти аналогичные два кода дают разные результаты?
- 14. При каких условиях эти два SQL-запроса дают разные результаты?
- 15. Selenium * ElementPresent и * XpathCount дают разные результаты?
- 16. Не понимаю, почему эти два запроса дают разные результаты.
- 17. Почему эти два похожих фрагмента кода дают разные результаты?
- 18. Почему два логически похожих запроса в web2py дают разные результаты?
- 19. Почему эти запросы дают разные результаты?
- 20. Почему эти две реализации дают разные результаты?
- 21. HashMap и HashTable дают разные результаты выполнения
- 22. Почему эти два случая дают одинаковые результаты?
- 23. ДФА и ий дают разные результаты
- 24. PHP date_sunrise и date_sun_info дают разные результаты
- 25. Почему PasswordDeriveBytes и Rfc2898DeriveBytes дают разные результаты?
- 26. pycharm terminal и run дают разные результаты
- 27. Выражения "== True" и "истинно" дают разные результаты
- 28. Эквивалентные формулы дают разные результаты в MATLAB
- 29. PyMC2 и PyMC3 дают разные результаты ...?
- 30. Почему xgboost.cv и sklearn.cross_val_score дают разные результаты?