bigdecimal和double区别(bigdecimal比较相等的方法)

http://www.itjxue.com  2023-01-29 00:04  来源:未知  点击次数: 

decimal和double的区别

double 双精度浮点 64bit,

decimal 是高精度 128bit,浮点型。

double 有效数字15/16 位,范围 ±5.0 × 10 E?324 to ±1.7 × 10E308

decimal 有效数字 28/29 位,范围 ±1.0 × 10E?28 to ±7.9 × 10E28

( E -- 下接几次方)

decimal的有效位数很大,达到了28位,但是表示的数据范围却比double类型小。

请问java中,Double类型和double有什么不同?能否转换?

Double是类double是基础数据类型。Double类型是double的包装类,在JDK1.5以后,二者可以直接相互赋值,称为自动拆箱和自动装箱。如果是这样,可以用Double中的方法,将包装类转为基本数据类型。

可以转换的。

double和float的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double和float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

类型比特数有效数字数值范围

float326-7-3.4*10(-38)~3.4*10(38)

double6415-16-1.7*10(-308)~1.7*10(308)

longdouble12818-19-1.2*10(-4932)~1.2*10(4932)

简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字。

double类型的包装类是Double;

备注:double是基本数据类型,Double是对象。但是现在的jdk1.5以上版本都是可以直接进行转换的,java会自动进行封装,所有使用上的区别不是很大的。

java中BigDecimal与Float,Double的区别

Float,Double

分别是对float和double的封装表示的精度和他们是一样的。

但里面有很多有用的方法。。比如Double.praseDouble()等等。。

BigDecimal也是对数字类型数据的封装。。但他的精度是任意精度。。

即随便多长随便小数点后多少位。。

decimal,float和double的区别是什么?

float是单精度,double是双精度,decimal是数字型,它们所占的内存空间不一样,表示的位数也不一样。除了科学计算以外,一般不用double型的。对于数字(包括小数)一般用decimal型的。

我们可以像如下的方式定义一个decimal类型的浮点数:

decimal d = 12.30M;

对decimal、float、double错误的认识

在精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。

考虑下面的语句:

double ? dd ? = ? 10000000000000000000000d;

dd ? += ? 1;

Console.WriteLine ? ( ? "{0:G50}", ? dd ? );

输出是:1000000000000000000000000

这就是浮点数精度损失的问题,最重要的是,在精度损失的时候,不会报告任何的错误,也不会有任何的异常产生。

浮点数的精度损失可能在很多地方出现,例如d ? * ? g ? / ? g ? 不一定等于d,d ? / ? g ? * ? g也不一定等于d。

还有两个非常危险的错误认识!!

1、decimal不是浮点型、decimal不存在精度损失。

下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在!

decimal ? dd ? = ? 10000000000000000000000000000m;

dd ? += ? 0.1m;

Console.WriteLine ? ( ? "{0:G50}", ? dd ? );

2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。

微软在decimal的帮助上真的要好好反省了。实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。

“decimal?? 类型是适合财务和货币计算的?? 128?? 位数据类型。”

当然,decimal在大多数情况下是安全的,但浮点数在理论上是不安全的。

至于精度误差造成的显示问题,则是很容易修补的。浮点数会带来的问题以及整型能避免的问题就是一个:

譬如说从A帐户转账到B帐户,经计算得出结果是3.788888888888888元,那么我们从A帐户扣除这么多钱,B帐户增加这么多钱,但事实上A帐户不一定会扣除准确的数值,例如A帐户的金额在100000000000,那么这个时候100000000000?? -?? 3.788888888888888运算结果很有可能是99999999996.211111111111112。而这个时候B帐户的金额为0则很有可能加上准确的数值,如3.788888888888888,这样一来,0.011111111111112元钱就会不见了,日积月累的,差额就会越来越大。

double是64位的,比single-32位精度高。

decimal128位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差,decimal类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。

(责任编辑:IT教学网)

更多

推荐Oracle认证文章