小数类型
1个回答
展开全部
Python2.4中引入了一种新的核心数据类型:小数对象,其正式的名称是Decimal。从语法上来讲,需要通过调用已导入模块中的函数来创建小数,而不是通过运行字面量表达式来创建。从功能上讲,小数对象很像浮点数,但它们由固定的位数和小数点。因此,小数是精度固定的浮点数。
例如,使用小数对象,我们可以得到一个只保留两位小数精度的浮点数。此外,我们可以顶替如果省略和截断额外的小数数字。尽管这相对于一般的浮点数类型来说带来了性能上的损失,但小数类型对表达式固定精度的特性以及对实现更好的数值精度而言是一个理想的工具。
小数基础知识
下面是最后值得介绍的一点,正如我们在探索比较知识时简要预习过的,浮点数运算缺乏精确性,这是因为用来存储数值的空间有限,例如,下面的计算结果应该为零,但并非如此。其结果很接近0,但却没有足够的位数来实现这样的精度
在Python3.1和2.7之前的版本,打印结果会产生一个用户友好的显示格式,但并不能完全解决问题,因为与硬件相关的的浮点数运算在精确度方面有着内在的缺陷。
不过如果使用了小数对象,那么结果将根准确。
如你所见,我们可以通过调用decimal模块中的Decimal的构造函数来创建一个小数对象,并传入一个表示结果中显示小数位数的字符串。当你在表达式中混合不同精度的小数时,Python会自动转换为最高的小数位数。
你可以从一个浮点数对象创建小数对象,即通过decimal。Decimal.from_float(1.25)形式的调用来实现,而最新的Python版本允许直接使用浮点数来创建。这一转换是精确的,但是有时候会产生默认且庞大的小数位数。
在Python3.3以及之后的版本,小数模块的性能也得到了极大的提升,新版本宣称其速度提升了10到100倍,不过这取决于基于测试的程序种类
设置全局小数精度
decimal模块中的其他一些工具可以用来设置所有小数数值的精度,安排错误处理等。例如,该模块中的一个上下文对象可以指定精度(小数位数)和舍入模式(向下取整,向上取整等),该精度将会全局性的应用到调用线程中创建的所有小数。
对于处理货币这样的应用程序尤其重要,其中美分表示为两位小数位数。在这个上下文中,小数实际上是手动舍入和字符串格式化的一种替代方式
小数上下文管理器
你可以使用with上下文管理器唠临时重置小数精度。在with语句退出后,精度优惠重置为初始值。
由于小数类型在实际中仍然较少用到,因此请参考跑一趟获得标准库手册和交互式帮助来了解更多细节。
例如,使用小数对象,我们可以得到一个只保留两位小数精度的浮点数。此外,我们可以顶替如果省略和截断额外的小数数字。尽管这相对于一般的浮点数类型来说带来了性能上的损失,但小数类型对表达式固定精度的特性以及对实现更好的数值精度而言是一个理想的工具。
小数基础知识
下面是最后值得介绍的一点,正如我们在探索比较知识时简要预习过的,浮点数运算缺乏精确性,这是因为用来存储数值的空间有限,例如,下面的计算结果应该为零,但并非如此。其结果很接近0,但却没有足够的位数来实现这样的精度
在Python3.1和2.7之前的版本,打印结果会产生一个用户友好的显示格式,但并不能完全解决问题,因为与硬件相关的的浮点数运算在精确度方面有着内在的缺陷。
不过如果使用了小数对象,那么结果将根准确。
如你所见,我们可以通过调用decimal模块中的Decimal的构造函数来创建一个小数对象,并传入一个表示结果中显示小数位数的字符串。当你在表达式中混合不同精度的小数时,Python会自动转换为最高的小数位数。
你可以从一个浮点数对象创建小数对象,即通过decimal。Decimal.from_float(1.25)形式的调用来实现,而最新的Python版本允许直接使用浮点数来创建。这一转换是精确的,但是有时候会产生默认且庞大的小数位数。
在Python3.3以及之后的版本,小数模块的性能也得到了极大的提升,新版本宣称其速度提升了10到100倍,不过这取决于基于测试的程序种类
设置全局小数精度
decimal模块中的其他一些工具可以用来设置所有小数数值的精度,安排错误处理等。例如,该模块中的一个上下文对象可以指定精度(小数位数)和舍入模式(向下取整,向上取整等),该精度将会全局性的应用到调用线程中创建的所有小数。
对于处理货币这样的应用程序尤其重要,其中美分表示为两位小数位数。在这个上下文中,小数实际上是手动舍入和字符串格式化的一种替代方式
小数上下文管理器
你可以使用with上下文管理器唠临时重置小数精度。在with语句退出后,精度优惠重置为初始值。
由于小数类型在实际中仍然较少用到,因此请参考跑一趟获得标准库手册和交互式帮助来了解更多细节。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询