关于double和float的包装类Double和Float代码如下 Double d1 = 1.0;Double d2 = 1.0;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于double和float的包装类Double和Float代码如下 Double d1 = 1.0;Double d2 = 1.0;相关的知识,希望对你有一定的参考价值。

答案是 false;一直搞不懂,八大基本类型基本数据类型的包装类型应该是放在堆内存中的常量池中吧,d1=1.0的时候 常量池中如果没有1.0就会创建一个1.0出来,然后d2发现常量池中有1.0,应该会直接指向这个1.0的吧。这样的话d1和d2的地址值应该是一样的吧。为啥会false呢?其他的几个八大类型的包装基本数据类型我读试过,都true,就Double和Float,这两个浮点型,求解,是不是我那个地方理解出错了
d1==d2 为false 搞不懂

参考技术A 这个就是浮点数不能直接比较的问题 参考技术B 浮点数好像不能恒等,只能比大小的吧

MySQL中Decimal类型和Float Double的区别

参考技术A float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
MySQL
浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的
可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
FLOAT和DOUBLE在不指
定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。
1、CREATE
TABLE
test(f
FLOAT(5,2)
DEFAULT
NULL,d
DOUBLE(5,2)
DEFAULT
NULL,de
DECIMAL(5,2)
DEFAULT
NULL);
2、DESC
test;
3、INSERT
INTO
test(f,d,de)
VALUES(1.23,1.23,1.23);
数据插入都正确
4、INSERT
INTO
test(f,d,de)
VALUES(1.234,1.234,1.23);
数据插入都正确,但是f和d由于标度的限制,舍去了最后一位。
5、INSERT
INTO
test(f,d,de)
VALUES(1.234,1.234,1.234);
数据也插入成功,但是有一个警告提示:
1
queries
executed,
1
success,
0
errors,
1
warnings
Note
Code
:
1265
Data
truncated
for
column
'de'
at
row
1
6、将id1,id2,id3的精度和标度都去掉
ALTER
TABLE
test
MODIFY
f
FLOAT;
ALTER
TABLE
test
MODIFY
d
DOUBLE;
ALTER
TABLE
test
MODIFY
de
DECIMAL;
DELETE
FROM
test;
DESC
test;
7、INSERT
INTO
test(f,d,de)
VALUES(1.234,1.234,1.234);
1
queries
executed,
1
success,
0
errors,
1
warnings
Note
Code
:
1265
Data
truncated
for
column
'de'
at
row
1
f和d的数据正确插入,而de被截断。
浮点数如果不写精度和标度,则会按照实际显示,如果有精度和标度,则会将数据四舍五入后插入,系统不报错,定点数如果不设置精度和标度,刚按照默认的(10,0)进行操作,如果数据超过了精度和标度值,则会警告!
同时,对数据求SUM()时会出现不同的结果,float和double求SUM都会出现很多小数点,而decimal求SUM得到的是精准数值:
8、INSERT
INTO
test(f,d,de)
VALUES(1.234,0.01,1.23);
数据都插入成功
9、SELECT
SUM(f),SUM(d),SUM(de)
FROM
test;
理论上SUM(f)=3.698,SUM(d)=2.474,SUM(de)=3.46,但f,d都出现后面很长的一串浮点小数点。

以上是关于关于double和float的包装类Double和Float代码如下 Double d1 = 1.0;Double d2 = 1.0;的主要内容,如果未能解决你的问题,请参考以下文章

Java语言中类Double与基本类型double间有何关系

关于Integer 和Double包装类创建对象时的底层解析

java包装类

常用类一一基本数据类型的包装类(WrapperClass)一一Byte Short nteger Long Float Double Character Boolean

java - 常见对象(基本类型包装类)

包装类型