カンマ含む浮動小数点の文字列を整数に変換する
music botは実装できたので、今度はおしゃべりBOTを作っています。
日経新聞のHPから日経平均を取得して返すBOTを作ったのですが、日経平均が21,803.95と、小数点とカンマを含んだ文字列で返ってきます。
そこまで精密じゃなくて良いので、小数点を切り捨てようと思ったら意外に出来ずハマってしまいました。
単純に、int()使えばすぐやん、と思ったのですが、小数点を含む文字列をintで整数には変換できないようです。
# これは問題なく変換出来ます。 >>> int("200") 200 # 小数点があるとダメです。 >>> int("200.00") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '200.00'
なのでflaotにすればいいんじゃないかとやってみました。
# これは出来ます。 >>> float('200.00') 200.0
ならばこれで取得した日経平均をfloatにしてみます。
>>> float('21,803.95') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: could not convert string to float: '21,803.95'
なんか怒られました。
どうやら、文字列の中にカンマが含まれてるとfloatは機能してくれないようです。
忖度しろや。
てことで、replaceを使ってカンマを消してみました。
>>> float('21,803.95'.replace(',', '')) 21803.95
出来た!
ここまで出来ればあとは簡単。
>>> int(float('21,803.95'.replace(',', ''))) 21803
面倒ですが、一度floatにしてからintにする事で無事整数に変換出来ました。
カッコだらけで見づらいのでfloatの値は変数に入れてからでもいいかもですね。
再度カンマを付けたかったらformatを使えばOKです。
他にもっとスマートなやり方あるのかな?
なんかこうゆう初歩的な事が突然分からないと不安になりますが、まぁ一歩一歩やっていくしかないですね。
同じ初学者さんの参考になったら幸いです。