Pythonで数字がおかしくなる 3.209e-05って何? 浮動小数点と解決方法

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

シェアする

  • このエントリーをはてなブックマークに追加

フォローする