浮点型(Floating Point Number)与字符型(char)

发布于:2022-12-14 ⋅ 阅读:(1557) ⋅ 点赞:(1)

 

 

类型 占用存储空间 表数范围
float 4字节 -3.403E38~3.403E38
double 8字节 -1.798E308~1.798E308

①float类型又被称作单精度类型,尾数可以精确到7位有效数字

②double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。

③Java浮点型类型常量有两种表示形式

(1)十进制数形式:例:3.14  314.0  0.314

(2)科学记数法形式:例:3.14e0  3.14E2  3.14E-1

④浮点型不精确,不用于比较

浮点数存在舍入误差,数字不能精确表示。

浮点数适合普通的科学和工程计算,精度足够;但不适合精度要求非常高的商业计算,这个时候要使用BigDecimal进行运算和比较。

⑤浮点常量默认类型是double,要改成float可以后面加F和f。

eg.使用科学计数法給浮点型变量赋值

double f = 314e2;  //314*10^2-->31400.0
double f2 = 314e-2;  //314*10^(-2)-->3.14

float类型的数值有一个后缀F或者f,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d,以明确其为double类型。

eg1.float类型常量的写法及变量的声明

float f = 3.14F;  //float类型赋值时需要添加后缀F/f
double d1 = 3.14;
double d2 = 3.14D;

eg2.浮点型数据的比较一

float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);  //结果为false

eg3.浮点型数据比较二

float d1 = 423432423f;
float d2 = d1 + 1;
if(d1==d2){
    System.out.println("d1==d2");  //输出结果为d1==d2
}else{
    System.out.println("d1!=d2");
}

运行以上两个示例,发现示例1的结果是false,而示例2的输出结果是d1==d2。这是因为由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近,但不等于。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制的浮点数表示。

java.math包下面的两个有用的类:BigIntegerBigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

Note:不要使用浮点数进行比较,需要比较要使用BigDecimal类。

字符型

 

ASCII字符集表示了英文字母、数字、特殊字符、控制符,所有字符集的老祖宗,大家都会兼容它。但是一个字节能够表示256个状态,而ASCII字符只用到128个,后面128个一直是空的。

于是有了ISO8859-1,别名latin-1,包含了256个字符。前128个字符与ASCII中完全相同。后128个包括了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的字符号。

随着我国的计算机普及,汉字的处理也有了我们自己的方案,那就是GB2312,两个字节表示1个汉字,两个字节可以表示65536个状态,汉字再多也能包含全部。后来,又有了GBK,GB18030。

我国的台湾地区自己搞了一套显示繁体中文的大五码BIG5。

全世界各个地方,都有自己的文字编码,由于不互通,经常造成乱码的问题。

如果有一种统一的字符集,将世界上所有的语言字符都纳入其中,每一个字符都给予一个全球独一无二的编码,那么乱码问题就会消失,于是,全球所有国家和民族使用的所有语言字符的统一字符集诞生了,这就是Unicode字符集。

Unicode 字符集是为了给全世界所有字符集一个唯一的编码,"唯一"对应的英文为Unique,而编码的英文为code。

Unicode采用了字符集和编码分开的策略。Unicode诞生之前可以将字符集和字符编码混为一谈,而在Unicode中必须严格区分开。

Unicode字符集统一采用两个字节表示一个字符,包括英文字母。但是,由于英文占据互联网信息的绝大部分。真实存储和传输时,会造成极大的浪费;因此,目前主要采用UTF-8编码来实现具体的存储和传输。UTF-8是变长编码,用1-6个字节编码Unicode字符。西欧字符仍然是1个字节,汉字3个字节。 

字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如'A'是一个字符,它与"A"是不同的,"A"表示含有一个字符的字符串。

char类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。

字符型演示

char eChar = 'a';
char cChar = '中';

Unicode具有从0到65535之间的编码,他们通常用从' \u0000'到 ' \uFFFF'之间的十六进制值来表示(前缀为u表示Unicode)

字符型的十六进制值表示方法

char c = '\u0061';

Java语言中还允许使用转义字符  '\'  来将其后的字符转变为其它的含义。

常用的转义字符及其含义和Unicode值如下:

转义字符

char c2 = '\n';  //代表换行符
转义字符
转义符 含义 Unicode
\b 退格(backspace) \u0008
\n 换行 \u000a
\r 回车 \u000d
\t 制表符(tab) \uooo9
\ " 双引号 \u0022
\ ' 单引号 \u0027
\ 反斜杠 \u005c

Note:

String类,其实是字符系列(char sequence),本质是char字符组成的数组。


网站公告

今日签到

点亮在社区的每一天
去签到