Python之fraction模块的使用

fraction模块的作用

Fraction类基于numbers模块中Rational定义的API来实现有理数的数值运行。

1、创建有理数,整数类型,计算最小的分公母的示例

import fractions

for n, d in [(1, 2), (2, 4), (3, 6)]:
    f = fractions.Fraction(n, d)
    print('{}/{}={}'.format(n, d, f))
fractions_create_integers.py

运行效果

1/2=1/2
2/4=1/2
3/6=1/2

2、创建有理数,字符串类型,计算最小的分公母的示例

import fractions

for s in ['1/2', '2/4', '3/6']:
    f = fractions.Fraction(s)
    print('{}={}'.format(s, f))
fractions_create_strings.py

运行效果

1/2=1/2
2/4=1/2
3/6=1/2

 3、创建有理数,浮点类型,计算最小的分公母的示例

import fractions

for s in ['0.5', '1.5', '2.0', '5e-1']:
    f = fractions.Fraction(s)
    print('{0:>4}={1}'.format(s, f))
fractions_create_strings_floats.py

运行效果

 0.5=1/2
 1.5=3/2
 2.0=2
5e-1=1/2

 4、直接使用浮点类型表示有理数(0.1会报错)

import fractions

for s in [0.1, 0.5, 1.5, 2.0]:
    f = fractions.Fraction(s)
    print('{0}={1}'.format(s, f))
fractions_from_float.py
0.1=3602879701896397/36028797018963968 #需要decimal模块来解决
0.5=1/2
1.5=3/2
2.0=2

5、直接使用Decimal模块浮点字符串类表示有理数

import fractions
import decimal

for s in [decimal.Decimal('0.1'),
          decimal.Decimal('0.5'),
          decimal.Decimal('1.5'),
          decimal.Decimal('2.0')]:
    f = fractions.Fraction(s)
    print('{0}={1}'.format(s, f))
fractions_from_decimal.py

运行效果

0.1=1/10
0.5=1/2
1.5=3/2
2.0=2

6、有理数的算术运算

import fractions

f1 = fractions.Fraction(1, 2)
f2 = fractions.Fraction(3, 4)

print('{} + {} = {}'.format(f1, f2, f1 + f2))
print('{} - {} = {}'.format(f1, f2, f1 - f2))
print('{} * {} = {}'.format(f1, f2, f1 * f2))
print('{} / {} = {}'.format(f1, f2, f1 / f2))
fractions_arithmetic.py

运行效果

1/2 + 3/4 = 5/4
1/2 - 3/4 = -1/4
1/2 * 3/4 = 3/8
1/2 / 3/4 = 2/3

7、通过分母的大小来控制这个分数值

import fractions
import math

print('PI       =', math.pi)

f_pi = fractions.Fraction(str(math.pi))
print('No limit =', f_pi)

for i in [1, 6, 11, 60, 70, 90, 100]:
    limited = f_pi.limit_denominator(i)
    print('{0:8} = {1}'.format(i, limited))
fractions_limit_denominator.py

运行效果

PI = 3.141592653589793
No limit = 3141592653589793/1000000000000000
1 = 3
6 = 19/6
11 = 22/7
60 = 179/57
70 = 201/64
90 = 267/85
100 = 311/99

posted @ 2020-05-13 11:44  小粉优化大师  阅读(985)  评论(0编辑  收藏  举报