zaifからxem/btc価格を取得したいがちゃんとした数字が取得できない
AWS cloud9で仮想通貨python botを作ってみようと思った所、
上手く金額が取得できなかったため解決策を記載しておきます
認証の要らない
https://api.zaif.jp/api/1/last_price/xem_btc
からgetで取得しようとした所、
3.365e-05
のような変な英字混じりの数字が
コード側の問題かと思いましたが直接アクセスしてもこれになっています
https://api.zaif.jp/api/1/last_price/xem_btc
エクセルで数字を入力したらたまになる奴に似ていますね
本当は[0.00003375]のように小数点以下が多い数字を出したいです
変換方法
is_float_expression等を使っても上手くいきませんでした
decimalを使います
from decimal import Decimal
num = ‘3.365e-05’
print(Decimal(num))
出力:
0.0000336499999999999980008179301105286640449776314198970794677734375
長すぎますので
丸めます
from decimal import Decimal, ROUND_HALF_UP
num = ‘3.365e-05’
print(Decimal(num))
print(Decimal(num).quantize(Decimal(‘.00000000’),rounding=ROUND_HALF_UP))
出力:
0.00003365
Decimal(‘.00000000’)で桁数を指定しています
※通常のROUNDだと、0.5が1にならず0になる場合があるのでROUND_HALF_UPを利用する
右端の数字を偶数にるように丸めてしまうのが主な原因だが小数点以下だとその限りではない
浮動小数点数が上手く表示できないのが理由のようです
Python3 round()について
追記 formatで変換
from decimal import Decimal, ROUND_DOWN
num = ‘3.365e-05’
print(“{0:.10f}”.format(Decimal(num)))
※{0:.10f}で小数点以下を10桁
{0:.15f}で小数点を5桁まで表示
出力:
0.0000336500