Precisão decimal para cálculos de API

Última atualização: 26 de jun. de 2025

Precisão calculada versus exibida

Os cálculos internos da API são realizados usando o número de casas decimais necessário, dependendo da precisão da moeda em questão, mas os valores exibidos 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) usam até 10 casas decimais (a precisão máxima utilizável para BTC é de 8 casas), mas são por vezes exibidos usando apenas 5 casas decimais. Da mesma forma, os cálculos de Dólar Americano (USD) usam até 4 casas decimais (a precisão máxima utilizável para USD é, claro, de 2 casas), mas são frequentemente exibidos usando apenas 2 casas decimais.

O endpoint Assets da API REST pode ser usado 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 mostrado, 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

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

Por exemplo, uma ordem SHIB/USD para comprar 50.123 SHIB a US$ 0,00002901 resulta em uma negociação no valor de US$ 1,45406823 (50.123 x 0,00002901 = 1,45406823), mas o endpoint Ledgers da API REST mostra que o saldo em USD diminuiu em um valor de precisão menor de US$ 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 de 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 (veja a seção anterior acima), portanto, o valor calculado localmente de US$ 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 mostrado, ao arredondar/truncar para a precisão decimal apropriada, o valor final de US$ 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?