如何获取小数点后的数字?

2025-02-21 08:50:00
admin
原创
49
摘要:问题描述:如何获取小数点后的数字?例如,如果我有5.55,我如何获得.55?解决方案 1:5.55 % 1 请记住,这不会帮助您解决浮点舍入问题。即,您可能会得到:0.550000000001 或者与您期望的 0.55 略有偏差。解决方案 2:使用modf:>>> import math &...

问题描述:

如何获取小数点后的数字?

例如,如果我有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)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1989  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1446  
  在当今快速发展的IT行业中,项目管理工具的选择对于项目的成功至关重要。随着技术的不断进步,项目经理们需要更加高效、灵活的工具来应对复杂的项目需求。本文将介绍2025年IT项目经理力推的10款管理工具,帮助您在项目管理中取得更好的成果。信创国产项目管理软件 - 禅道禅道是一款国产开源的项目管理软件,禅道开源版不限人数,功...
项目管理工具   0  
  在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目成功的关键工具。随着技术的不断进步,市场上涌现出众多功能各异的项目管理工具,每一款都有其独特的优势和适用场景。本文将深入评测2025年最受欢迎的10款项目管理软件,帮助您根据自身需求做出明智的选择。信创国产项目管理软件 - 禅道禅道是一款...
项目管理平台   2  
  产品开发效率对于企业的竞争力至关重要。在当今复杂多变的商业环境中,如何有效提升产品开发效率成为众多企业关注的焦点。产品生命周期管理(PLM)作为一种整合产品全生命周期信息的管理理念和技术,为提升产品开发效率提供了有力的支持。通过合理运用PLM,企业能够优化流程、加强协作、提高数据管理水平,从而实现产品开发的高效运作。接...
plm开发流程软件   3  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用