小数点以下の数字を取得するにはどうすればよいですか?
たとえば、5.55
がある場合、.55
を取得するにはどうすればよいですか?
あなたのための簡単なアプローチ:
number_dec = str(number-int(number))[1:]
5.55 % 1
これは、浮動小数点の丸めの問題には役立ちません。つまり、次のようになります:
0.550000000001
または、期待する0.55から少し外れます。
modf を使用します。
>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
どうですか:
a = 1.3927278749291
b = a - int(a)
b
>> 0.39272787492910011
または、numpyを使用して:
import numpy
a = 1.3927278749291
b = a - numpy.fix(a)
Moduloを試してください:
5.55%1 = 0.54999999999999982
import math
orig = 5.55
whole = math.floor(orig) # whole = 5.0
frac = orig - whole # frac = 0.55
受け入れられた答えと同様に、文字列を使用したさらに簡単なアプローチは
if "." in str(number): # quick check if it is decimal
number_dec = str(number).split(".")[1]
if 'e-' in str(number): # scientific notation
number_dec = format(float(number_dec), '.%df'%(len(number_dec.split(".")[1].split("e-")[0])+int(number_dec.split('e-')[1])))
>>> n=5.55
>>> if "." in str(n):
... print "."+str(n).split(".")[-1]
...
.55
import math
x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )
それは間違いなく働いた
例:
import math
x = 5.55
print((math.floor(x*100)%100))
これにより、小数点の後に2つの数字、その例から55が得られます。 1つの数字が必要な場合は、上記の計算を10減らすか、小数点以下の数字の数に応じて増やします。
Floorを使用して、元の数値から結果を減算します。
>> import math #gives you floor.
>> t = 5.55 #Give a variable 5.55
>> x = math.floor(t) #floor returns t rounded down to 5..
>> z = t - x #z = 5.55 - 5 = 0.55
これは私が試した解決策です:
num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
末尾のゼロが重要な場合がある
In [4]: def split_float(x):
...: '''split float into parts before and after the decimal'''
...: before, after = str(x).split('.')
...: return int(before), (int(after)*10 if len(after)==1 else int(after))
...:
...:
In [5]: split_float(105.10)
Out[5]: (105, 10)
In [6]: split_float(105.01)
Out[6]: (105, 1)
In [7]: split_float(105.12)
Out[7]: (105, 12)
浮動小数点数は10進数(base10)形式で保存されません。これについて pythonのドキュメント を読んで、理由を確認してください。したがって、floatからbase10表現を取得することはお勧めできません。
現在、数値データを10進形式で保存できるツールがあります。以下は、Decimal
ライブラリーを使用した例です。
from decimal import *
x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66' # True
y = 0.341343214124443151466
str(y)[-2:] == '66' # False
これを試してみてください:
your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])
0.55
を返します。
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)
出力:0.55
どうですか:
a = 1.234
b = a - int(a)
length = len(str(a))
round(b, length-2)
出力:print(b)
0.23399999999999999
round(b, length-2)
0.234
ラウンドは10進数の文字列の長さ(「0.234」)に送信されるため、マイナス2だけで「0.」をカウントせず、必要な小数点数を算出できます。小数点以下の桁数が多く、bを計算する際の丸め誤差がroundの2番目のパラメーターに干渉しない限り、これはほとんどの場合に機能します。