Выбор типа данных для хранения денег (Float64 vs UInt64)

624 views
Skip to first unread message

Igor A.

unread,
Aug 15, 2016, 7:36:39 AM8/15/16
to ClickHouse
Добрый день.

В документации написано

 >Не рекомендуется хранить числа с плавающей запятой в таблицах. Какие могут быть проблемы с double в ClickHouse? Аггрегатные функции вроде поддерживаются корректно. Имеет ли смысл держать деньги как целое с фикс запятой с точки зрения производительности (UInt64 / 1_000_000) ? или подобные оптимизации избыточны?

man...@gmail.com

unread,
Aug 15, 2016, 5:19:22 PM8/15/16
to ClickHouse
Здесь подробный ответ:
https://groups.google.com/d/msg/clickhouse/JjkogknZXn0/d5oV-d5XBQAJ

Для денег лучше используйте UInt64, содержащие значение с фиксированной запятой.
Скорее не из-за производительности, а из-за проблем с накоплением погрешности во Float-ах.
Так, Float не может представить значение 0.1 точно: ближайшее машинно-представимое число типа Float64 отличается от 0.1, и при суммировании (и других операциях) будет накапливаться погрешность.

Igor A.

unread,
Aug 16, 2016, 8:06:30 AM8/16/16
to ClickHouse
Спасибо большое, это именно то что нужно.


PS
Увы я проглядел и не нашел данную тему в поиске, а нашел вначале другую которая была больше про Fixed Precision числа.
https://groups.google.com/forum/#!searchin/clickhouse/Decimal$20data$20type%7Csort:relevance/clickhouse/xYo5aMmz95E/WCgNXDk_BgAJ

Вопрос был, потому как есть богатый опыт использования double именно в финансовых расчетах и при аккуратном применении с ним никогда не было проблем. Особенности IEEE floating point расчетов понимаем.


Reply all
Reply to author
Forward
0 new messages