Precisão decimal para cálculos da API

Última atualização: 26/06/2025

Precisão calculada versus apresentada

Os cálculos internos da API são realizados utilizando o número de casas decimais necessário, dependendo da precisão da moeda em questão, mas os valores apresentados são por vezes arredondados/truncados para obter um valor utilizável ou para fins de formatação.

Por exemplo, os cálculos de Bitcoin (BTC) utilizam até 10 casas decimais (a precisão máxima utilizável para BTC é de 8 casas), mas são por vezes apresentados utilizando apenas 5 casas decimais. Da mesma forma, os cálculos de Dólar Americano (USD) utilizam até 4 casas decimais (a precisão máxima utilizável para USD é, claro, de 2 casas), mas são frequentemente apresentados utilizando apenas 2 casas decimais.

O endpoint Assets da API REST pode ser utilizado para determinar as precisões decimais máximas para moedas individuais:

$ ./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}}}

Conforme demonstrado, o endpoint Assets fornece as precisões decimais de cálculo através dos campos "decimals" e as precisões decimais de exibição através dos campos "display_decimals".

 

Correspondência de valores locais com valores da API

Os valores derivados de cálculos locais (como o cálculo de alterações de saldo a partir do preço e volume de uma transação) têm frequentemente mais casas decimais do que o necessário e precisam de ser arredondados/truncados para corresponder aos valores fornecidos pela API.

Por exemplo, uma ordem SHIB/USD para comprar 50,123 SHIB a $0.00002901 resulta numa transação no valor de $1.45406823 (50,123 x 0.00002901 = 1.45406823), mas o endpoint Ledgers da API REST mostra que o saldo em USD diminuiu num valor de precisão menor de $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"}

A solução para este tipo de discrepância na precisão decimal é arredondar/truncar os valores locais para corresponder à precisão decimal fornecida pelo endpoint Assets da API REST.

Continuando o exemplo SHIB/USD, o endpoint Assets indica uma precisão de cálculo de USD de 4 (ver a secção anterior), portanto, o valor calculado localmente de $1.45406823 também deve ser arredondado/truncado para uma precisão decimal de 4:

  • 50,123 x 0.00002901 = 1.45406823 arredondado para 4 casas decimais = 1.4541

Conforme demonstrado, ao arredondar/truncar para a precisão decimal apropriada, o valor final de $1.4541 corresponde exatamente ao valor fornecido pelo endpoint Ledgers, permitindo que os valores locais sejam correspondidos com sucesso aos valores da API.

Precisa de mais ajuda?