python 浮点

 

python IDLE中敲入

>>> 0.1
0.10000000000000001 

>>> round(1.0/3, 2)
0.33000000000000002
>>> round(11.0/3, 2)
3.6699999999999999

    注意所有的编程语言都有这个问题。这是浮点数在计算机中的存储问题。

    考虑十进制是0.125这个小数,其二进制表示为0.001,这两个数是完全等同的。
    但是不是所有的小数都有这样的特性,大多数的小数不能用二进制精确的表示,其结果就是,所有十进制小数在计算机中都是用其最最近似的方式存储表示的。
    考虑分数1/3,可以用十进制近似成0.3,或者0.33,或者0.333。
注:小数部分由十进制转二进制的方法就是一直去掉整数部分,小数部分乘2,直到小数部分为0为止。
如:0.625转为二进制:
0.625*2 = 1.25,  整数部分为1,小数部分为0.25
0.25 * 2 = 0.5 ,  整数部分为0,小数部分为0.5
0.5  * 2 = 1   ,    整数部分为1,小数部分为0
所以0.625转为二进制的结果就是0.101
但是,有些小数,如0.2,再怎么乘2,小数部分也不会得到0的,所以,就有误差了。
 
    因此,考虑小数0.1,它不能用二进制精确的表示,而是表示成了:
0.0001100110011001100110011001100110011001100110011...
  所以你才看到了最开始的情况:
>>> 0.1
0.10000000000000001
  注意当没有使用print时,python解释器使用repr方法获得它需要显示的对象的字符串形式,对浮点数来说,
repr(float)取到小数点后17位;如果使用print,调用的是str方法:
>>> print 0.1
0.1
  使用round方法并不能取得预期效果,是因为0.10000000000000001已经是1/10的最近似的数了,它总是
取最好的结果。
再看一个示例:
>>> sum=0.0
>>> for i in range(10):
 sum+= 0.1
 
>>> sum
0.99999999999999989
  很多的浮点数运算有这样类似的“奇怪”结果。
  解决办法是使用python的decimal模块:
>>> 0.1*0.5
0.050000000000000003
>>> from decimal import *
>>> Decimal("0.1")*Decimal("0.5")
Decimal("0.05")
  这个模块的功能也比较全面和强大。不予详细说明。
### Python浮点型数据类型的使用方法 #### 什么是浮点型? 在 Python 中,`float` 是一种用来表示实数的数据类型。它遵循 IEEE 754 标准,通常占用 64 位存储空间[^5]。这种数据类型可以表示非常大或非常小的数值,并支持科学计数法。 #### 如何定义浮点型变量? 可以通过直接赋值的方式创建一个 `float` 类型的变量。例如: ```python x = 3.14 # 正常的小数形式 y = -0.5 # 负数小数形式 z = 1.23e5 # 科学计数法形式 print(type(x)) # 输出:<class &#39;float&#39;> ``` 上述代码展示了三种常见的浮点型定义方式:普通小数、负数以及科学计数法。其中,`1.23e5` 表示 \(1.23 \times 10^5\) 的含义[^4]。 #### 浮点型运算 浮点型可以直接参与算术运算,包括加减乘除等操作。然而需要注意的是,在某些情况下由于计算机内部二进制表达的原因,可能会存在精度损失的问题。例如: ```python a = 0.1 + 0.2 print(a) # 输出可能不是精确的 0.3,而是类似于 0.30000000000000004 ``` 为了处理高精度的需求,可以引入模块 `decimal` 来解决这一问题[^3]。以下是具体实现的例子: ```python import decimal v1 = decimal.Decimal(&#39;0.1&#39;) v2 = decimal.Decimal(&#39;0.2&#39;) result = v1 + v2 print(result) # 输出:0.3 ``` 通过字符串的形式传递参数到 `Decimal` 构造函数中能够有效避免因浮点数转换带来的误差。 #### 特殊值的支持 除了普通的数值外,Python浮点型还支持一些特殊值,比如无穷大 (`inf`) 和非数字 (`nan`)。这些值可以在特定场景下被用作边界条件检测或其他用途。例如: ```python positive_inf = float(&#39;inf&#39;) # 正无穷 negative_inf = float(&#39;-inf&#39;) # 负无穷 not_a_number = float(&#39;nan&#39;) # 非数字 print(positive_inf > 1e308) # True, 因为超出了最大可表示范围 print(not_a_number == not_a_number) # False, 这是 NaN 的特性之一 ``` 以上代码片段说明了如何利用内置的 `float()` 函数来生成特殊的浮点数值。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值