Python float to ratio(Python浮动比率)
问题描述
我尝试获取变量的比例并得到意想不到的结果.有人可以解释一下吗?
I try get ration of variable and get unexpected result. Can somebody explain this?
>>> value = 3.2
>>> ratios = value.as_integer_ratio()
>>> ratios
(3602879701896397, 1125899906842624)
>>> ratios[0] / ratios[1]
3.2
我使用 python 3.3
I using python 3.3
但我认为 (16, 5)
是更好的解决方案
But I think that (16, 5)
is much better solution
以及为什么它适用于 2.5
>>> value = 2.5
>>> value.as_integer_ratio()
(5, 2)
推荐答案
使用 fractions
模块 简化分数:
Use the fractions
module to simplify fractions:
>>> from fractions import Fraction
>>> Fraction(3.2)
Fraction(3602879701896397, 1125899906842624)
>>> Fraction(3.2).limit_denominator()
Fraction(16, 5)
来自 Fraction.limit_denominator()
函数一个>:
From the Fraction.limit_denominator()
function:
查找并返回与 self
最接近且分母最多为 max_denominator 的 Fraction
.此方法对于找到给定浮点数的有理逼近很有用
Finds and returns the closest
Fraction
toself
that has denominator at most max_denominator. This method is useful for finding rational approximations to a given floating-point number
浮点数精度有限,不能精确表示;你看到的是一个四舍五入的表示,但实数是:
Floating point numbers are limited in precision and cannot represent many numbers exactly; what you see is a rounded representation, but the real number is:
>>> format(3.2, '.50f')
'3.20000000000000017763568394002504646778106689453125'
因为浮点数表示为二进制小数的总和;1/5 只能通过将 1/8 + 1/16 + 1/128 + 更多的二进制分数相加来表示,以增加 2 的指数.
because a floating point number is represented as a sum of binary fractions; 1/5 can only be represented by adding up 1/8 + 1/16 + 1/128 + more binary fractions for increasing exponents of two.
这篇关于Python浮动比率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Python浮动比率


基础教程推荐
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 包装空间模型 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 求两个直方图的卷积 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01