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

问题描述 投票:0回答:30

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

例如,如果我有

5.55
,我如何获得
.55

python floating-point decimal
30个回答
279
投票
5.55 % 1

请记住,这不会帮助您解决浮点舍入问题。即,您可能会得到:

0.550000000001

或者稍微偏离您期望的 0.55。


203
投票

使用modf

>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0

83
投票

关于:

a = 1.3927278749291
b = a - int(a)

b
>> 0.39272787492910011

或者,使用 numpy:

import numpy
a = 1.3927278749291
b = a - numpy.fix(a)

43
投票

使用标准库中的

decimal
模块,您可以保留原始精度并避免浮点舍入问题:

>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')

正如评论中的 kindall notes 一样,您必须首先将原生

float
转换为字符串。


31
投票

给您一个简单的方法:

number_dec = str(number-int(number))[1:]

10
投票

尝试取模:

5.55%1 = 0.54999999999999982

10
投票

要使其同时适用于正数和负数: 尝试

 abs(x)%1
。对于负数,不带
abs
,会出错。

5.55 % 1

输出0.5499999999999998

-5.55 % 1

输出0.4500000000000002


6
投票
import math
orig = 5.55
whole = math.floor(orig)    # whole = 5.0
frac = orig - whole         # frac = 0.55

5
投票

与接受的答案类似,使用字符串的更简单方法是

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

4
投票
>>> n=5.55
>>> if "." in str(n):
...     print "."+str(n).split(".")[-1]
...
.55

4
投票

只需使用简单的运算符除法'/'下限除法'//',您就可以轻松获得任何给定浮点数的小数部分。

number = 5.55

result = (number/1) - (number//1)

print(result)

3
投票

有时尾随零很重要

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)

3
投票

使用 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

2
投票

这是我尝试过的解决方案:

num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))

2
投票

浮点数不以十进制(base10)格式存储。通读一下 python 文档 来了解一下原因。因此,不建议从浮点数获取以 10 为基数的表示形式。

现在有一些工具允许以十进制格式存储数值数据。以下是使用

Decimal
库的示例。

from decimal import *

x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66'  # True

y = 0.341343214124443151466
str(y)[-2:] == '66'  # False

2
投票

如果输入是字符串,我们可以使用 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


1
投票

使用下限并从原始数字中减去结果:

>> 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

1
投票

示例:

import math
x = 5.55
print((math.floor(x*100)%100))

这将为您提供小数点后两个数字,即该示例中的 55。如果您需要一个数字,您可以将上述计算结果减去 10,或者根据您想要小数点后的数字数量来增加。


1
投票
import math

x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )

确实有效


1
投票

另一种选择是将

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减法中去掉多余的浮点数?


1
投票

您可以使用这个:

number = 5.55
int(str(number).split('.')[1])

1
投票

仅当您想获得第一个小数时

print(int(float(input()) * 10) % 10)

或者你可以试试这个

num = float(input())
b = num - int(num) 
c = b * 10
print(int(c))

1
投票

使用数学模块

这速度有待测试

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


1
投票
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

1
投票
a = 12.587
b = float('0.' + str(a).split('.')[-1])

0
投票

关于:

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 的第二个参数。


0
投票

您可能想尝试一下:

your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])

它会回来

0.55


0
投票
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)

输出:0.55


0
投票

看看我经常在python中如何获取小数点后的数字 3:

a=1.22
dec=str(a).split('.')
dec= int(dec[1])

0
投票

如果您使用的是熊猫:

df['decimals'] = df['original_number'].mod(1)
© www.soinside.com 2019 - 2024. All rights reserved.