python中关于小数转分数

python中用于分数计算的模块是fractions,本篇博客内容来自官网:fractions — 分数

文章目录

          1、float类型引号引起来   

          2、limit_denominator(max_denominator

          1、实例化

          2、获取分子和分母

一、fraction的基本用法

1、实例化

Fraction(numerator=0, denominator=1),其中numerator是分子,denominator是分母。并且能够单独接受“有理数”、float、decimal和string类型的数字。

示例如下:


    
    
  1. >>> from fractions import Fraction
  2. #第一个数是分子,第二个数是分母
  3. >>> Fraction( 2, 6)
  4. Fraction( 1, 3)
  5. #可以直接进行四则运算,如果最后的结果以分数(有理数)显示,可以直接使用Fraction类型计算,不必和float来回转换
  6. >>> Fraction( 2, 6)*Fraction( 1, 4)
  7. Fraction( 1, 12)
  8. >>> Fraction( 2, 6)/Fraction( 1, 4)
  9. Fraction( 4, 3)
  10. # 0的表示
  11. >>> Fraction( 0)
  12. Fraction( 0, 1)

如果分数没有被引号引起来,就会当作float类型处理,就会出现偏差,原因可参考python控制小数位数和四舍五入问题详解


    
    
  1. >>> Fraction( '2/3')
  2. Fraction( 2, 3)
  3. >>> Fraction( 2/ 3)
  4. Fraction( 6004799503160661, 9007199254740992)
  5. #直接Fraction(1.1)得不到我们想要的11/10结果
  6. >>> Fraction( 1.1)
  7. Fraction( 2476979795053773, 2251799813685248)
  8. >>> Fraction( '1.1')
  9. Fraction( 11, 10)

2、获取分子和分母

示例:


    
    
  1. >>> from fractions import Fraction
  2. >>> Fraction(3,6).numerator
  3. 1
  4. >>> Fraction(3,6).denominator
  5. 2

二、如何避免浮点数(float)和有理数转化“失真”

1、float类型引号引起来

正如上面的示例,float类型如果引起来,可以有效避免失真。


    
    
  1. >>> Fraction( '1.1')
  2. Fraction( 11, 10)
  3. >>> Fraction( 1.1)
  4. Fraction( 2476979795053773, 2251799813685248)

2、limit_denominator(max_denominator)

max_denominator默认值是1000000,这个函数用于返回一个分母不大于max_denominator且最接近原值的分数,示例如下:


    
    
  1. >>> from math import pi
  2. >>> Fraction(pi)
  3. Fraction(884279719003555, 281474976710656)
  4. >>> Fraction(pi).limit_denominator(1000)
  5. Fraction(355, 113)
  6. >>> Fraction(pi).limit_denominator()
  7. Fraction(3126535, 995207)
  8. #也能用于一些浮点数到有理数的“期望”转化
  9. >>> Fraction(1.1).limit_denominator()
  10. Fraction(11, 10)

原文链接:https://blog.csdn.net/u012949658/article/details/105837120

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值