在标准库中学习十进制,这似乎是python 3.6中的一个新函数:
as_integer_ratio()
返回一对整数(n, d),这些整数以小数形式表示给定的Decimal实例,以最低条件表示,并带有正分母
所以我试了一下:
print(Decimal(1.25).as_integer_ratio()) # >>> (5, 4)
print(Decimal(1.33).as_integer_ratio()) # >>> (748723438050345, 562949953421312)
对于1.25
工作正常,但是很难相信748723438050345 / 562949953421312
是1.33
的最低分数项,也许133/100
可以是更好的输出?
好的,我在使用Decimal('1.33')
而不是Decimal(1.33)
时得到了回答,那么这是否意味着在使用Decimal()时,最好输入str
而不是float
?
你传入的是浮点对象,正是这些对象引入了不精确,你不能用二进制分数表示1和1/3:
>>> format(1.33, '.53')
'1.3300000000000000710542735760100185871124267578125'
>>> (1.33).as_integer_ratio()
(748723438050345, 562949953421312)
而是传入一个字符串:
>>> Decimal('1.33').as_integer_ratio()
(133, 100)
从文件中:
十进制数字可以精确表示。相比之下,像1.1
和2.2
这样的数字在二进制浮点中没有精确表示。最终用户通常不会期望1.1 2.2
像在二进制浮点中那样显示为3.3000000000000003
。
和
如果值是浮点数
,则二进制浮点数值将无损地转换为其精确的十进制等效值。这种转换通常需要53位或更多的精度。例如,Decimal('1.1')
转换为Decimal('1.100000000000000088817841970012523233890533447265625')
。
尝试使用
from decimal import Decimal
print(Decimal('1.25').as_integer_ratio()) # >>> (5, 4)
print(Decimal('1.33').as_integer_ratio())
(5, 4)
(133, 100)
它的标准不同
当你这么做的时候
Decimal(1.25)
Python将我们的文字基10表示转换为浮点对象中的内部基2表示。我们选择的两个值都不能精确地用基数2表示,因此会出现一些舍入。这些四舍五入的浮点值随后被传递给十进制构造函数,并用于构造内部的基数10表示,用于计算。最后,对十进制对象执行该操作。因此,尽管十进制构造函数支持从float转换,但您应该始终将分数十进制文本指定为字符串,以避免创建不精确的中间基2 float对象
为了防止这样的事故请设置
为了避免无意中从浮点构造十进制对象,我们可以修改十进制模块中的信号处理。我们通过在decimal模块上下文的traps属性中将与float操作键关联的值设置为true来实现这一点。有了这个变化,我们试图直接从float构造十进制对象会引发一个FloatOperation异常。
decimal.getcontext().traps[decimal.FloatOperation] = True
例如,对于以下情况,将提出例外
Decimal(0.8) > 0.7
来回答你的问题
Decimal(1.33),这是否意味着在使用Decimal()时,最好输入str而不是float
Python float类型甚至会导致最简单的十进制值出现问题,这在任何需要精确算法的应用程序中都是不可接受的,例如在金融环境中。Decimal类型是一种快速正确舍入的数字类型,用于执行以10为基数的算术运算。关键的是,decimal类型仍然是浮点类型,尽管基数是10而不是2,并且精度有限,但用户可以配置,而不是固定的。使用十进制代替浮点数,比如会计应用程序可以大大减少难以调试的边缘情况。Decimal软件包的创建是为了消除浮动的缺陷。
Python3 实例 以下代码用于实现十进制转二进制、八进制、十六进制: # -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com # 获取用户输入十进制数 dec = int(input("输入数字:")) print("十进制数为:", dec) print("转换为二进制为:", bin(dec
问题内容: 如何将十进制转换为以下格式的十六进制(至少两位,零填充,没有0x前缀)? 输入: 输出: 输入: 输出: 我尝试过,但似乎它显示了第一个示例,但没有显示第二个示例。 问题答案: 将该功能与格式一起使用。 该部分要求使用至少2位数字,并使用零将其填充到长度,表示小写的十六进制。 的 格式规范的迷你语言 也给你大写十六进制输出,并且可以前缀字段宽度与以包括或前缀(取决于你阉羊使用或作为格式
问题内容: 我这里有一个将十进制转换为十六进制的函数,但它以相反的顺序打印。我该如何解决? 问题答案: 如果要自己编写此代码而不是使用内置函数,则可以在打印当前数字之前简单地进行递归调用:
两周以来,我一直在努力和阅读来解决这个问题,但我尝试的一切都没有奏效:-( 我正在使用python 2.7。 据我所知,我确实有一个base64字符串,格式如下: 我想把它转换成十六进制字符串。00000000194BD636AEDEAE4C9827C9465288D7F40700BA89A9BA12E1314B81606DB385F3B7B100000074656E0000BA89A9BA12E
本文向大家介绍python十进制转二进制的详解,包括了python十进制转二进制的详解的使用技巧和注意事项,需要的朋友参考一下 python十进制转二进制 python中十进制转二进制使用 bin() 函数。 bin() 返回一个整数 int 或者长整数 long int 的二进制表示。 下面是使用示例: 补充:十进制转8进制和16进制的方法: 内容扩展: 以上就是本次介绍的全部相关知识点,感谢大
问题内容: 我有一些Perl代码,其中hex()函数将十六进制数据转换为十进制。如何在Python上执行此操作? 问题答案: 如果用“十六进制数据”表示字符串形式 您可以使用 将其转换为整数并 将其转换为十进制字符串。