Десятичная точность для расчетов API

Последнее обновление: 26 июн. 2025 г.

Расчетная и отображаемая точность

Внутренние расчеты API выполняются с использованием максимально возможного количества десятичных знаков в зависимости от точности соответствующей валюты, но отображаемые значения иногда округляются/усекаются для получения пригодного для использования значения или для целей форматирования.

Например, расчеты Bitcoin (BTC) используют до 10 десятичных знаков (максимальная используемая точность для BTC составляет 8 знаков), но иногда отображаются с использованием только 5 десятичных знаков. Аналогично, расчеты в долларах США (USD) используют до 4 десятичных знаков (максимальная используемая точность для USD, конечно, составляет 2 знака), но часто отображаются с использованием только 2 десятичных знаков.

Конечная точка REST API Assets может быть использована для определения максимальной десятичной точности для отдельных валют:

$ ./krakenapi Assets asset=xbt,usd

{"error":[],"result":{"XXBT":{"aclass":"currency","altname":"XBT","decimals":10,"display_decimals":5},"ZUSD":{"aclass":"currency","altname":"USD","decimals":4,"display_decimals":2}}}

Как показано, конечная точка Assets предоставляет десятичную точность расчетов через поля decimals и десятичную точность отображения через поля display_decimals.

 

Сопоставление локальных значений со значениями API

Значения, полученные в результате локальных расчетов (например, расчет изменений баланса на основе цены и объема сделки), часто имеют больше десятичных знаков, чем требуется, и должны быть округлены/усечены для соответствия значениям, предоставляемым API.

Например, ордер SHIB/USD на покупку 50 123 SHIB по цене $0,00002901 приводит к сделке на сумму $1,45406823 (50 123 x 0,00002901 = 1,45406823), но конечная точка REST API Ledgers показывает, что баланс USD уменьшился на значение с меньшей точностью $1,4541:

"L2A7BN-OLRUR-DGZH7F":{"refid":"T5JORM-HM432-GQ3RGY","time":1639991413.4671,"type":"trade","subtype":"","aclass":"currency","asset":"ZUSD","amount":"-1.4541","fee":"0.0000","balance":"124.7277"}

Решение этой проблемы расхождения в десятичной точности заключается в округлении/усечении локальных значений для соответствия десятичной точности, предоставляемой конечной точкой REST API Assets.

Продолжая пример SHIB/USD, конечная точка Assets указывает точность расчета USD равную 4 (см. предыдущий раздел выше), следовательно, локально рассчитанное значение $1,45406823 также должно быть округлено/усечено до десятичной точности 4:

  • 50 123 x 0,00002901 = 1,45406823 округлено до 4 знаков после запятой = 1,4541

Как показано, путем округления/усечения до соответствующей десятичной точности, конечное значение $1,4541 точно соответствует значению, предоставленному конечной точкой Ledgers, что позволяет успешно сопоставлять локальные значения со значениями API.

Нужна дополнительная помощь?