#用python计算0到100之间有多少个数可以被4整除
def fun_TimesFoure():
lst = []
i = 0
while i<101:
if i % 4 == 0:
lst.append(i)
i += 1
print(f"0到100之间有{len(lst)}个数可以被4整除")
print("它们分别是:",lst)
return
python为什么会出现这种错误?这是 Python 的浮点数精度问题,因为 Python 在存储浮点数的方法是存储二进制的科学计数法。
8 字节 64 位存储空间分配了 52 位来存储浮点数的有效数字,11 位存储指数,1 位存储正负号。
简单来说,因为小数点后面理论上可以有无限位数,所以不可能在有限字节中精确存储,所以用的是类似科学计数法的非精确存储。我们用分数来打比方,0.333334 可以用 1/3 来表示,但是 1/3 不等于 0.333334。所以在 Python 中就出现了这个问题,不光是 Python,其他语言也有类似的问题。
如何解决这种问题
接下来我们看看如何解决这个问题。
对于精确度要求不高的场景,可以计算后使用 round 函数近似。
对于确定小数位数的场景,例如金额 1.01,固定两位小数,则可以乘以 100 以后用整型保存。
对于精确度要求高的场景,Python 有 decimal 模块处理。
Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。
其中数字又包含整型(整型又包括标准整型、长整型(Python2.7及之前版本有))、浮点型、复数类型、布尔型(布尔型就是只有两个值的整型)、这几种数字类型。列表、元组、字符串都是序列。
1、数字
数字类型是不可更改的对象。对变量改变数字值就是生成/创建新的对象。Python支持多种数字类型:
整型(标准整型和长整型(Python2.7及之前的有这种类型))、布尔型、双精度浮点型、十进制浮点型、复数。
2、标准整型
int,标准整型,在大多数32位机器上标准整型取值范围是-2^31到2^31-1,也就是-2147483648~2147483647,如果在64位机器使用64位编译器,那么这个系统的标准整型将是64位。
3、布尔型
bool,从Python2.3开始Python中添加了布尔类型。布尔类型有两种True和False。对于没有__nozero__方法的对象默认是True。
对于值为0的数字、空集(空列表、空元组、空字典等)在Python中的布尔类型中都是False。
>>> bool(1)
True
>>> bool('a')
True
>>> bool(0)
False
>>> bool('')
False
4、浮点型
float,每个浮点型占8个字节(64位),完全遵守IEEE754号规范(52M/11E/1S),其中52个位用于表示底,11个位用于表示指数(可表示的范围大约是±10**308.25),剩下的一个位表示符号。这看上去相当完美,然而,实际精度依赖于机器架构和创建Python解释器的编译器。
浮点型值通常都有一个小数点和一个可选的后缀e(大写或小写,表示科学计数法)。在e和指数之间可以用正(+)或负(-)表示指数的正负(正数的话可以省略符号)。
以上是Python核心编程的对浮点型(双精度浮点型)的说明。经过Python实测浮点型默认长度是24字节如果超出这个范围会自动
5、复数类型
complex,在复数中虚数不能单独存在,它们总是和一个值为0.0的实数部分一起来构成一个复数。复数由实数部分和虚数部分构成。表示虚数的语法:real+imagj。
实数部分和虚数部分都是浮点型。虚数部分必须有后缀j或J。