如何获取小数点后的数字?
例如,如果我有
5.55
,我如何获得.55
?
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)
给您一个简单的方法:
number_dec = str(number-int(number))[1:]
尝试取模:
5.55%1 = 0.54999999999999982
要使其同时适用于正数和负数: 尝试
abs(x)%1
。对于负数,不带abs
,会出错。
5.55 % 1
输出0.5499999999999998
-5.55 % 1
输出0.4500000000000002
import math
orig = 5.55
whole = math.floor(orig) # whole = 5.0
frac = orig - whole # frac = 0.55
与接受的答案类似,使用字符串的更简单方法是
def number_after_decimal(number1):
number = str(number1)
if 'e-' in number: # scientific notation
number_dec = format(float(number), '.%df'%(len(number.split(".")[1].split("e-")[0])+int(number.split('e-')[1])))
elif "." in number: # quick check if it is decimal
number_dec = number.split(".")[1]
return number_dec
>>> n=5.55
>>> if "." in str(n):
... print "."+str(n).split(".")[-1]
...
.55
只需使用简单的运算符除法'/'和下限除法'//',您就可以轻松获得任何给定浮点数的小数部分。
number = 5.55
result = (number/1) - (number//1)
print(result)
有时尾随零很重要
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)
使用 modf 的另一个示例
from math import modf
number = 1.0124584
# [0] decimal, [1] integer
result = modf(number)
print(result[0])
# output = 0124584
print(result[1])
# output = 1
这是我尝试过的解决方案:
num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
浮点数不以十进制(base10)格式存储。通读一下 python 文档 来了解一下原因。因此,不建议从浮点数获取以 10 为基数的表示形式。
现在有一些工具允许以十进制格式存储数值数据。以下是使用
Decimal
库的示例。
from decimal import *
x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66' # True
y = 0.341343214124443151466
str(y)[-2:] == '66' # False
如果输入是字符串,我们可以使用 split() 更容易
decimal = input("Input decimal number: ") #123.456
# split 123.456 by dot = ['123', '456']
after_coma = decimal.split('.')[1]
# because only index 1 is taken then '456'
print(after_coma) # '456'
如果你想输入数字 打印(int(昏迷后))#456
使用下限并从原始数字中减去结果:
>> 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
示例:
import math
x = 5.55
print((math.floor(x*100)%100))
这将为您提供小数点后两个数字,即该示例中的 55。如果您需要一个数字,您可以将上述计算结果减去 10,或者根据您想要小数点后的数字数量来增加。
import math
x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )
确实有效
另一种选择是将
re
模块与 re.findall
或 re.search
: 一起使用
import re
def get_decimcal(n: float) -> float:
return float(re.search(r'\.\d+', str(n)).group(0))
def get_decimcal_2(n: float) -> float:
return float(re.findall(r'\.\d+', str(n))[0])
def get_int(n: float) -> int:
return int(n)
print(get_decimcal(5.55))
print(get_decimcal_2(5.55))
print(get_int(5.55))
0.55
0.55
5
如果您想简化/修改/探索表达式,请在regex101.com的右上角面板上进行解释。如果您愿意,您还可以在此链接中观看它如何与某些示例输入进行匹配。
您可以使用这个:
number = 5.55
int(str(number).split('.')[1])
仅当您想获得第一个小数时
print(int(float(input()) * 10) % 10)
或者你可以试试这个
num = float(input())
b = num - int(num)
c = b * 10
print(int(c))
这速度有待测试
from math import floor
def get_decimal(number):
'''returns number - floor of number'''
return number-floor(number)
示例:
n = 765.126357123
get_decimal(n)
0.12635712300004798
def fractional_part(numerator, denominator):
# Operate with numerator and denominator to
# keep just the fractional part of the quotient
if denominator == 0:
return 0
else:
return (numerator/ denominator)-(numerator // denominator)
print(fractional_part(5, 5)) # Should be 0
print(fractional_part(5, 4)) # Should be 0.25
print(fractional_part(5, 3)) # Should be 0.66...
print(fractional_part(5, 2)) # Should be 0.5
print(fractional_part(5, 0)) # Should be 0
print(fractional_part(0, 5)) # Should be 0
a = 12.587
b = float('0.' + str(a).split('.')[-1])
关于:
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
由于一轮发送到小数串的长度(“0.234”),我们可以只减 2 来不计算“0.”,并计算出所需的小数点位数。这应该在大多数情况下有效,除非您有很多小数位,并且计算 b 时的舍入误差会干扰 round 的第二个参数。
您可能想尝试一下:
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
看看我经常在python中如何获取小数点后的数字 3:
a=1.22
dec=str(a).split('.')
dec= int(dec[1])
如果您使用的是熊猫:
df['decimals'] = df['original_number'].mod(1)