仅当重复python时,四舍五入到小数点后两位
我想知道是否有人知道python中的一种快速方法来检查分数是否给出重复的小数 我有一个小函数,它接受两个数字并将它们分开。如果商是重复的小数,我想四舍五入到小数点后2位,如果商不是重复的,我只想四舍五入到1位 例如: 800/600=1.33333,等于1.33 900/600=1.5将保持为1.5 我知道我需要使用这两种语句进行两种舍入仅当重复python时,四舍五入到小数点后两位,python,rounding,fractions,Python,Rounding,Fractions,我想知道是否有人知道python中的一种快速方法来检查分数是否给出重复的小数 我有一个小函数,它接受两个数字并将它们分开。如果商是重复的小数,我想四舍五入到小数点后2位,如果商不是重复的,我只想四舍五入到1位 例如: 800/600=1.33333,等于1.33 900/600=1.5将保持为1.5 我知道我需要使用这两种语句进行两种舍入 output = "{:.2f}".format(float(num)) output = "{:,}".format(float(num)) 但是我对if
output = "{:.2f}".format(float(num))
output = "{:,}".format(float(num))
但是我对if语句的指向有困难
有人能帮我了解一下吗
重复小数
只有10个分数可以写成重复的数字-(0)
,(1)
<代码>(9)。所以,若您只关心从小数点后开始的重复模式,那个么只需要对照这些情况进行检查
如果乘以9,所有这些数字(只有它们)都会给出一个整数
因此,如果(9*numenator)%denominator==0
,您将打印两位数字
不过,您可能希望排除(0)
模式。为此,请测试分数实际上是否为整数-numenator%分母==0
此外,还可以查看模块,以防您需要重新设计一些轮子
当然,如果您的数字只有一个浮点数
,那么什么是numenator和分母就有一些模糊性,因为浮点数
s实际上并不存储像1/3
这样的有理数。您可以尝试使用分数。限制分母()
来选择适合您情况的东西。使用模块,该模块实现精确的有理运算:
import fractions
# fractions.Fraction instances are automatically put in lowest terms.
ratio = fractions.Fraction(numerator, denominator)
然后,您可以检查结果的分母:
def is_repeating(fraction):
denom = fraction.denominator
while not (denom % 2):
denom //= 2
while not (denom % 5):
denom //= 5
return denom != 1
试试这个:用蛮力就行了。因为你只需要2位小数。只需将其除以,然后在四舍五入到0和小数点后1位时对其进行测试,看看它在哪里不再唯一。如果此时它不是唯一的,则四舍五入到小数点后2位
def f(x):
if x == round(x,0):
return '{:.0f}'.format(x)
elif x == round(x,1):
return '{:.1f}'.format(x)
else:
return round(x,2)
y = [1, 2, 3, 3/2, 1/9, 8/9, 1/11, 12/11, 10/11, 14/13, 1/3]
for item in y:
print(f(item))
输出:
1
2
3
1.5
0.11
0.89
0.09
1.09
0.91
1.08
0.33
>>>
1.33
只是一个使用regex的变通方法:)
输出:
1
2
3
1.5
0.11
0.89
0.09
1.09
0.91
1.08
0.33
>>>
1.33
对于900/600
1.5
所有分数都可以用重复的小数来写。像你在学校做的那样进行分组,并检查是否有立即重复的模式。你想用1/1打印什么?还是5/4?啊,对不起,这可能是个愚蠢的问题。对于1/1,我想显示1,对于5/4,我将显示1.25。我的目标是不显示任何尾随的0,您希望10/99的值是多少,即0.101010…?我希望看到10/99=0.10“重复小数”包括像1/7和10/99这样的数字。重复部分不必是单个数字。这意味着将900/600
打印为1.50
,而OP的示例中并非如此。900/600终止。它确实有一个重复的小数点-0,这是问题中的区别。但是,任何分数都有一个,但没有任何分数部分具有仅由此模式组成的十进制表示<代码>1.5(0)
有其“5”,因此被截断。您完全误解了“重复小数”一词的含义,也许更重要的是,您对该词的使用与提问者的意图不符。例如,提问者希望10/99的0.10
,其重复部分有两位数长。