0
0

More than 1 year has passed since last update.

Pythonの便利技と注意点:計算編

Last updated at Posted at 2022-08-25

目次に戻る

Pythonは小数点の計算が苦手

小数点の引き算するとこうなる
>>> 1.0 - 0.1
0.9
>>> 1.0 - 0.2
0.8
>>> 1.0 - 0.3
0.7
>>> 1.0 - 0.4
0.6
>>> 1.0 - 0.5
0.5
>>> 1.0 - 0.6
0.4
>>> 1.0 - 0.7
0.30000000000000004
>>> 1.0 - 0.8
0.19999999999999996
>>> 1.0 - 0.9
0.09999999999999998
解決法の1つ:整数の計算は問題ないようなので1度整数倍にしてあげて後で戻す
>>> num_a = 1.0
>>> num_b = 0.7

>>> ((num_a * 10) - (num_b * 10)) / 10
0.3
>>> num_b = 0.8
>>> ((num_a * 10) - (num_b * 10)) / 10
0.2
>>> num_b = 0.9
>>> ((num_a * 10) - (num_b * 10)) / 10
0.1

round関数を使わずに小数点切り捨てする技

// 1を使う ※但し小数点以下の.0は残る
>>> 2837.20 // 1
2837.0
int()を使うと小数点以下の.0は消える
>>> int(2837.20)
2837
whileの条件で割り引いて0円になったら抜けるつもりが、0.xxxxxが永遠に続く
intを設定したとしても割合の計算の時点で自動にfloatに変換され永遠に続く
>>> a = 150
>>> b = 70
>>> while(a>0):
	a -= a * 70 / 100
	print(a)

45.0
13.5
4.050000000000001



7.971615000000002e-05
2.3914845e-05
こういう時は上記の例を使って整数にして抜け出す
割合計算でfloatにされたものをintに戻してあげることでa>0の条件を設定できる
>>> a = 150
>>> b = 70
>>> while(a>0):
	a -= a * 70 / 100
	a = int(a)
	print(a)	
45
13
3
0

マイナスを含む割り算の注意点

仕様:Pythonの負の数の割り算は、割り切れない場合、商の値は0から離れた方の整数になる

10 // -3 は、少数にすると、-3.333...となり、この値を挟む-3と-4を比較して0からより離れた値になる
>>> 10 // -3
-4
-10 // 3も同じ
>>> -10 // 3
-4

また、Pythonの % による余りの計算は、割られる数 - 割る数 x 商、が行われるので、下記のような結果が出てくる

商が-4になるので、10 % -3 は、10 - {-3 x (-4)} と計算されて -2 となる
>>> 10 % -3
-2
同様に -10 % 3 は、-10 - {3 x (-4)} と計算されて 2 となる
>>> -10 % 3
2

目次に戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0