如何获取小数点后的数字?
- 2025-02-21 08:50:00
- admin 原创
- 49
问题描述:
如何获取小数点后的数字?
例如,如果我有5.55
,我如何获得.55
?
解决方案 1:
5.55 % 1
请记住,这不会帮助您解决浮点舍入问题。即,您可能会得到:
0.550000000001
或者与您期望的 0.55 略有偏差。
解决方案 2:
使用modf:
>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
解决方案 3:
那么:
a = 1.3927278749291
b = a - int(a)
b
>> 0.39272787492910011
或者,使用 numpy:
import numpy
a = 1.3927278749291
b = a - numpy.fix(a)
解决方案 4:
使用decimal
标准库中的模块,您可以保留原始精度并避免浮点舍入问题:
>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')
正如kindall在评论中 指出的那样,您必须float
先将 native s 转换为字符串。
解决方案 5:
为您提供一种简单的方法:
number_dec = str(number-int(number))[1:]
解决方案 6:
尝试取模:
5.55%1 = 0.54999999999999982
解决方案 7:
要使其适用于正数和负数:尝试 abs(x)%1
。对于负数,如果不使用abs
,则会出错。
5.55 % 1
输出 0.5499999999999998
-5.55 % 1
输出 0.4500000000000002
解决方案 8:
import math
orig = 5.55
whole = math.floor(orig) # whole = 5.0
frac = orig - whole # frac = 0.55
解决方案 9:
与接受的答案类似,使用字符串的更简单的方法是
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
解决方案 10:
>>> n=5.55
>>> if "." in str(n):
... print "."+str(n).split(".")[-1]
...
.55
解决方案 11:
只需使用简单的运算符除法“/”和向下取整除法“//”,您就可以轻松获得任何给定浮点数的分数部分。
number = 5.55
result = (number/1) - (number//1)
print(result)
解决方案 12:
有时尾随零很重要
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)
解决方案 13:
看看这个:
>>> n = 5.55
>>> dec = int(str(n).split('.')[1])
>>> dec
55
>>> dec/(10**len(str(dec)))
0.55
作为函数,如果您想要 0.55(作为浮点数):
def decimal_part(n:float) -> float:
dec = int(str(n).split('.')[1])
return dec/(10**len(str(dec)))
如果你只想要 55 (整数):
def decimal_part(n:float) -> int:
return int(str(n).split('.')[1])
如果您不确定传递给函数的参数是浮点数还是整数,也可以n = float(n) if type(n)==int else n
在函数的第一行添加,如果 n 为负数(-5.55 给出 -0.55),则希望保留符号,请尝试以下操作:decimal_part
def decimal_part(n:float) -> float:
n = float(n) if type(n)==int else n
dec = int(str(n).split('.')[1])
if n>=0:
return dec/(10**len(str(dec)))
return -dec/(10**len(str(dec)))
让我们尝试一下:
>>> decimal_part(-5.55)
-0.55
解决方案 14:
这是我尝试过的解决方案:
num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
解决方案 15:
浮点数不以十进制 (base10) 格式存储。请阅读Python 文档以了解原因。因此,不建议从浮点数获取十进制表示。
现在有一些工具允许以十进制格式存储数字数据。下面是使用该Decimal
库的示例。
from decimal import *
x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66' # True
y = 0.341343214124443151466
str(y)[-2:] == '66' # False
解决方案 16:
如果输入的是字符串,则更简单,我们可以使用 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'
如果你想制作一个数字类型 print(int(after_coma)) # 456
解决方案 17:
a = 12.587
b = float('0.' + str(a).split('.')[-1])
解决方案 18:
使用 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
解决方案 19:
例子:
import math
x = 5.55
print((math.floor(x*100)%100))
这将为您提供小数点后两位数字,例如 55。如果您需要一个数字,则将上述计算结果减少 10,或者根据您想要小数点后的数字增加。
解决方案 20:
import math
x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )
它确实有效
解决方案 21:
另一种选择是使用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的右上角面板上对此进行了解释。如果您愿意,您还可以在此链接中观看它如何与一些示例输入进行匹配。
来源
如何在 python 减法中去除多余的浮点数?
解决方案 22:
你可以使用这个:
number = 5.55
int(str(number).split('.')[1])
解决方案 23:
这仅适用于您想要获取第一个小数的情况
print(int(float(input()) * 10) % 10)
或者你可以尝试一下
num = float(input())
b = num - int(num)
c = b * 10
print(int(c))
解决方案 24:
使用数学模块
必须测试其速度
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
解决方案 25:
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
解决方案 26:
那么:
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
由于舍入被发送到 a 的小数串的长度('0.234'),我们可以减去 2 以不计算 '0.',并计算出所需的小数位数。这在大多数情况下应该有效,除非您有很多小数位,并且计算 b 时的舍入误差会干扰舍入的第二个参数。
解决方案 27:
你可能想尝试一下:
your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])
它会回来的0.55
。
解决方案 28:
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)
输出:0.55
解决方案 29:
看看我在 python 3 中经常做什么来获取小数点后的数字:
a=1.22
dec=str(a).split('.')
dec= int(dec[1])
解决方案 30:
如果你使用熊猫:
df['decimals'] = df['original_number'].mod(1)