浮点数

Why Python's Integer Division Floors ---- python int(6/-132)时答案不一致,向下取整

北战南征 提交于 2019-12-10 23:32:49
leetcode150题中有一个步骤: int(6/-132) == 0 or ==-1? 在自己本地python3环境跑是int(6/-132) =0,但是提交的时候确实-1。 查找相关资料解惑: Why Python's Integer Division Floors 为何Python整除运算采用向下取整的规则 今天(又)有人问我,为什么Python中的整除(integer division)返回值向下取整(floor)而不是像C语言中那样向0取整。 在正整数范围内,两者并无实质差别,例如: >>> 5//2 2 但是当操作数之一为负时,结果是向下取整的,也就是远离0(接近负无穷方向): >>> -5//2 -3 >>> 5//-2 -3 或许部分人不太适应,数学上有一个较好的解释为何这样做。整除运算(//)和与之密切相关的取模运算(%)满足如下优美的数学关系式(所有变量均为整数): a/b = q 余数为 r 有 b * q + r = a 而且 0 <= r < b (假设a和b都>=0) 如果希望将这一关系扩展到a为负(b仍为正)的情况,有两个选择:一是q向0取整,r取负值,这时约束关系变为 0 <= abs(r) < b,另一种选择是q向下(负无穷方向)取整,约束关系不变,依然是 0 <= r < b。 在数学的数论中,数学家总是倾向于第二种选择(参见如下

Python入门——基本数据类型

白昼怎懂夜的黑 提交于 2019-12-10 22:52:45
1.数字类型 在Python中,数字类型主要包括:整数、浮点数、复数 整数: 用来表示整数数值,包括正整数、负整数、零。 它的位数是任意的,位数决定数值的大小。 整数类型包含十进制、二进制、八进制、十六进制整数(关于进制这里不介绍了,自行百度学习哈^_^)。 浮点数: 浮点数由整数部分和小数部分组成,主要用于处理小数。 浮点数可以使用科学计数法表示,例如3.2e2等 注意 :浮点数间的运算结果可能不太是我们预想的结果,例如下图: 0.1+0.2,结果为这么长一串数字,是不是感到很疑惑呢?对于这种情况,解决方法基本上是保留两位小数了。 复数: Python中的复数和数学中的复数形式完全一致,由实部和虚部组成,并且使用 j 或 J 表示虚部。当表示一个复数时,可以将实部和虚部相加。比如复数实部为3.14,虚部为12.5j,则这个复数可表示为3.14+12.5j。 2.字符串类型 字符串就是连续的字符序列。 字符串是不可变序列。 通常用单引号、双引号、三引号括起来。 字符串开头和结尾部分要一致。 举例: 3.布尔类型 布尔类型用来表示真值或者假值。真值为True,也表示为1;假值为False,也表示为0。 在Python中,所有的对象都可以进行真值测试。其中,只有下面列出的集中情况得到的值为假,其他对象在 if 或者 while 语句中都表现为真。 False或者None 数值中的零

浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。

老子叫甜甜 提交于 2019-12-10 13:41:45
【强制】浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。 说明:浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。 二进 Java 开发手册 8/44 制无法精确表示大部分的十进制小数,具体原理参考《码出高效》。 反例: float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; if (a == b) { // 预期进入此代码快,执行其它业务逻辑 // 但事实上 a==b 的结果为 false } Float x = Float.valueOf(a); Float y = Float.valueOf(b); if (x.equals(y)) { // 预期进入此代码快,执行其它业务逻辑 // 但事实上 equals 的结果为 false } 正例: (1) 指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。 float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; float diff = 1e-6f; if (Math.abs(a - b) < diff) { System.out.println("true"); } (2) 使用 BigDecimal 来定义值,再进行浮点数的运算操作。 BigDecimal a =

java笔记

荒凉一梦 提交于 2019-12-10 12:04:40
JAVA的数据类型占用内存空间大小是不一样的: 上图中一个方框代表一个字节,也就是8bit。浮点型数e表示以10为底数,并且浮点数结尾需要添加字母f,double类型数据同样是e为底数,不需要增加字母后缀。 在定义常量的时候,需要加上 final 修饰符,变量就被定义成常量了。一般来讲,常量名通常全部大写! 另外一个技巧就是:JAVA允许用var关键字声明变量,这样可以省略变量类型,由编译器决定变量类型。 定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变量名。 需要注意运算溢出: public class Main { public static void main(String[] args) { int x = 2147483640; int y = 15; int sum = x + y; System.out.println(sum); // -2147483641 } } 运算溢出不会报错,通常很难发现,为确保计算可靠性,初学者可以在数据运算过程中选用long等数据类型,保证运算不会出错,如果在严格的内存限制场景,需要提前考虑好合适的数据类型。 移位运算在Java里分为带符号与不带符号,对于带符号的右移 >> 与左移 << 一位相当于分别做乘2与除2操作(除以2取商),并且符号位不动。要特别注意这不是循环移位

python字符的表示格式

怎甘沉沦 提交于 2019-12-09 22:24:11
%% 百分号标记 #就是输出一个% %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) %x 无符号整数(十六进制) %X 无符号整数(十六进制大写字符) %e 浮点数字(科学计数法) %E 浮点数字(科学计数法,用E代替e) %f 浮点数字(用小数点符号) %g 浮点数字(根据值的大小采用%e或%f) %G 浮点数字(类似于%g) %p 指针(用十六进制打印值的内存地址) %n 存储输出字符的数量放进参数列表的下一个变量中 %s 字符串 举例: print("编号:%s\t\t姓名:%s\t\t性别:%s\t\t工资:%s\t\t" % (i[0],i[1]["name"],i[1]["sex"],i[1]["salary"])) sheet.write_string("A%d" % i,"%d" % i)sheet.write_string("B%d" % i, "%d" % sum) 来源: https://www.cnblogs.com/wyx1990/p/12013708.html

常用Java字段的正则校验

微笑、不失礼 提交于 2019-12-09 17:34:07
正则表达式: 单个字符的匹配规则如下: 多个字符的匹配规则如下: 复杂匹配规则主要有: 常用正则表达式校验规则: 一.校验数字的表达式 1.数字:^[0-9]*$ 2.n位的数字:^\d{n}$ 3.至少n位的数字:^\d{n,}$ 4.m-n位的数字:^\d{m,n}$ 5.零和非零开头的数字:^(0|[1-9][0-9]*)$ 6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7.带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8.正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$ 9.有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 10.有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 11.非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$ 12.非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$ 13.非负整数:^\d+$ 或 ^[1-9]\d*|0$ 14.非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$ 15.非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ 16

python浓缩(5)数字

大兔子大兔子 提交于 2019-12-09 14:15:13
详细介绍每一种数字类型,适用的各种运算符, 及用于处理数字的内建函数。 5.1 数字类型 数字提供了标量贮存和直接访问。它是不可更改类型,也就是说变更数字的值会生成新的对象。 Python 支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数。 如何创建数值对象并用其赋值 anInt = 1 如何更新数字对象 通过给数字对象(重新)赋值, 您可以“更新”一个数值对象。实际上你并没有更新该对象的原始数值。因为数值对象是不可改变对象。Python的对象模型与常规对象模型有些不同。更新实际上是生成了一个新的数值对象,并得到它的引用。 在Python 中, 变量更像一个指针指向装变量值的盒子。 对不可改变类型来说, 你无法改变盒子的内容, 但你可以将指针指向一个新盒子。每次将另外的数字赋给变量的时候,实际上创建了一个新的对象并把它赋给变量.(不仅仅是数字,对于所有的不可变类型,都是这么回事) 如何删除数字对象 你无法真正删除一个数值对象, 你仅仅是不再使用它而已。如果你实际上想删除一个数值对象的引用, 使用 del 语句(参见3.5.6 小节)。如果试图使用一个已经被删除的对象引用, 会引发NameError 异常。 del anInt del aLong, aFloat, aComplex 5.2 整型 Python 有几种整数类型。布尔类型是只有两个值的整型

python1:基础数据类型(上)

故事扮演 提交于 2019-12-09 14:09:02
https://www.geekdigging.com/2019/10/13/2870915864/ 1、数字 在python的数字有4钟数据类型,分别是: int(有符号整型) long(长整型) float(浮点型) complex(复数) python为我们提供了一个函数type(),通过这个函数我们可以获取到当前的数据类型。示例: print(type(123)) print(type(123.0)) print(type('123')) print(type("123")) 上面的示例的运行结果为: <class 'inr'> <clsee 'float'> <class 'str'> <class 'str'> 可以得到结论是: 123是整形(int) 123.0是浮点型(float) '123'和“123”的类型是一致的,都是字符串str 我们直接使用另一个函数isinstance(),这个函数的作用字面意思就能看出来,判断一个对象是否是一个已知的类型,具体语法如下: isinstance(object,classinfo) object-实例对象 classinfo-可以是直接或间接类名,基本类型或者由他们组成的元组。 示例代码如下: print(isinstance(123,int)) print(isinstance(123.0,float)) print

浮点数在计算机中的存储方式

北城余情 提交于 2019-12-09 12:25:16
文章参考地址: http://www.cnblogs.com/xugang/archive/2010/05/04/1727431.html C语言和 C#语言中,对于浮点型的数据采用 单精度类型 (float)和 双精度类型 (double)来存储: float 数据占用 32bit; double 数据占用 64bit; 我们在声明一个变量 float f = 2.25f 的时候,是如何分配内存的呢? 其实不论是 float 类型还是 double 类型,在存储方式上都是遵从IEEE的规范: float 遵从的是 IEEE R32.24; double 遵从的是 IEEE R64.53; 单精度 或 双精度 在存储中,都分为三个部分: 符号位 (Sign):0代表正数,1代表为负数; 指数位 (Exponent):用于存储科学计数法中的指数数据; 尾数部分 (Mantissa):采用移位存储尾数部分; 单精度 float 的存储方式如下: 双精度 double 的存储方式如下: R32.24 和 R64.53 的存储方式都是用 科学计数法来存储数据 的,比如: 8.25 用十进制表示为:8.25 * 10 0 120.5 用十进制表示为:1.205 * 10 2 而计算机根本不认识十进制的数据,他只认识0和1。所以在计算机存储中,首先要将上面的数更改为 二进制的科学计数法 表示:

Java 正则表达式

橙三吉。 提交于 2019-12-08 14:42:18
Java 正则表达式 博客分类: Android应用开发 正则表达式 Java 腾讯 QQ 正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^\s*|\s*$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]$