Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关于py3中的分数类_Python_Python 3.x_Math_Floating Point_Fractions - Fatal编程技术网

Python 关于py3中的分数类

Python 关于py3中的分数类,python,python-3.x,math,floating-point,fractions,Python,Python 3.x,Math,Floating Point,Fractions,在分数表示法中,是否有办法找到小数点后第k个位置的数字k最多为10^6。 我尝试将float(Fraction)转换为str,但没有给我所需的精度。您正在寻找Python中的模块(Python自带) 从十进制导入* 除法=5/3 印刷品(分部)#1.6667 getcontext().prec=6 除法=十进制(5)/十进制(3) 印刷品(分部)#1.66667 您正在寻找Python中的模块(Python自带) 从十进制导入* 除法=5/3 印刷品(分部)#1.6667 getcontext(

在分数表示法中,是否有办法找到小数点后第k个位置的数字<代码>k最多为
10^6
。 我尝试将
float(Fraction)
转换为
str
,但没有给我所需的精度。

您正在寻找Python中的模块(Python自带)

从十进制导入*
除法=5/3
印刷品(分部)#1.6667
getcontext().prec=6
除法=十进制(5)/十进制(3)
印刷品(分部)#1.66667
您正在寻找Python中的模块(Python自带)

从十进制导入*
除法=5/3
印刷品(分部)#1.6667
getcontext().prec=6
除法=十进制(5)/十进制(3)
印刷品(分部)#1.66667
您可以使用高精度浮点包(如
十进制
)来计算此值,但如果您只需要一个位数,则有更有效的方法:我们可以计算
34/23
的万亿位数(例如)在几分之一秒内,使用不大于
1000的整数进行整个计算

下面是一个简单的函数,它给出分数点
p/q
后的
k
th位:

def digit(p, q, k):
    """
    Return the kth digit after the point (k >= 1)
    of the fraction p / q.  p, q and k should be integers.
    """
    return pow(10, k-1, q) * p % q * 10 // q
还有一个例子:34/23具有十进制扩展
1.4782608695251739130434782608695215217…
,因此让我们使用上述函数从该扩展中获取一些数字

>>> digit(34, 23, 1)
4
>>> digit(34, 23, 3)
8
>>> digit(34, 23, 20)
0
>>> digit(34, 23, 30)
6
>>> digit(34, 23, 1_000_000_000)  # billionth digit after the point
5
下面以
34/23
为例解释一下为什么这样做:假设我们要计算小数点后的第5位。以下是手动操作的方法:我们首先乘以
10**4
,将所需数字之前的位置移动到点的左侧:

10**4*34/23=14782.608695252173913043478260869525217

现在我们扔掉整数部分,只保留小数部分:

分数部分=0.6086952521739130434782608695217

然后我们乘以10,得到小数点左侧的所需数字:

10*分数部分=6.086956521739130434782608695217

最后我们扔掉结果的小数部分,只保留
6
,这是我们想要的数字

所有这些操作都很容易在计算上高效完成:
10**(k-1)*p/q
的分数部分是
(10**(k-1)*p%q)/q
,我们可以在Python中使用
pow
的三参数形式作为
pow(10,k-1,q)*p%q
高效地计算
10**(k-1)*p%q
。现在为分子编写
r
,我们要计算
r*10/q
的整数部分。但这只是
r*10//q
,使用Python的整数除法运算符

所以整个事情就变成了:

pow(10, k-1, q) * p % q * 10 // q
您可以使用高精度浮点包(如
decimal
)来计算此值,但如果您只需要一个位数,则有更有效的方法:我们可以计算
34/23
(例如)的万亿位数在几分之一秒内,使用不大于
1000的整数进行整个计算

下面是一个简单的函数,它给出分数点
p/q
后的
k
th位:

def digit(p, q, k):
    """
    Return the kth digit after the point (k >= 1)
    of the fraction p / q.  p, q and k should be integers.
    """
    return pow(10, k-1, q) * p % q * 10 // q
还有一个例子:34/23具有十进制扩展
1.4782608695251739130434782608695215217…
,因此让我们使用上述函数从该扩展中获取一些数字

>>> digit(34, 23, 1)
4
>>> digit(34, 23, 3)
8
>>> digit(34, 23, 20)
0
>>> digit(34, 23, 30)
6
>>> digit(34, 23, 1_000_000_000)  # billionth digit after the point
5
下面以
34/23
为例解释一下为什么这样做:假设我们要计算小数点后的第5位。以下是手动操作的方法:我们首先乘以
10**4
,将所需数字之前的位置移动到点的左侧:

10**4*34/23=14782.608695252173913043478260869525217

现在我们扔掉整数部分,只保留小数部分:

分数部分=0.6086952521739130434782608695217

然后我们乘以10,得到小数点左侧的所需数字:

10*分数部分=6.086956521739130434782608695217

最后我们扔掉结果的小数部分,只保留
6
,这是我们想要的数字

所有这些操作都很容易在计算上高效完成:
10**(k-1)*p/q
的分数部分是
(10**(k-1)*p%q)/q
,我们可以在Python中使用
pow
的三参数形式作为
pow(10,k-1,q)*p%q
高效地计算
10**(k-1)*p%q
。现在为分子编写
r
,我们要计算
r*10/q
的整数部分。但这只是
r*10//q
,使用Python的整数除法运算符

所以整个事情就变成了:

pow(10, k-1, q) * p % q * 10 // q
有关类似问题,请参阅。有关类似问题,请参阅。