java中的精度问题

这个问题我通过举例来解决:

  1、对于浮点数,如果写了以下程序片段:

double PI=3.14

这个片段编译时没有问题,但是如果写了以下片段:

float PI=3.14

就会出现编译错误,这是因为在程序写下一个浮点数时,编译程序默认会使用double类型,你想要将double长度的数据指定给float类型变量,编译程序就会有错误提示。有两种方式可以避免这个错误:

第一种方式是在3.14后面加上F, 这会告诉编译程序,请用float来存储3.14这个值。例如:

float PI=3.14F

第二种方式就是明确告诉编译程序,你就是要将double类型的3.14丢到float变量中,请程序住嘴:

float PI=float3.14

这样编译就可以通过了。

2、对于整数,如果写下:

int number=10;

这没有问题,但是如果写下:

int number=2147483648;

编译时程序会提示如下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

The literal 2147483648 of type int is out of range 

也许你以为原因是int变量number装不下2147483648,因为int类型最大值是2147483648,认为这样可以解决问题:long number=2147483648;事实上并非是number装不下2147483648,而是程序中写下一个整数时,默认是使用不超过int类型长度,2147483648超出了int类型的长度,你要直接告诉编译程序,用long来配置整数的长度,也就是在数字后加上个L

Long number=2147483648L;

这样就可以通过编译了。刚才谈到,在程序中写下一个整数时,默认是使用默认是使用不超过int类型的长度,所以下面的程序可以通过编译:

byte number=10;

因为10是在byte可存储的范围中,不过这样不行:

Byte number=128;

128超过byte可存储的范围。

3、再看运算,如果表达式中包含不同类型数值,则运算时以长度最长的类型为主,其他数值自动提升类型。如:

int a=10;

double b=a*3.14;

在这个片段中,aint类型,而写下的3.14默认是double,所以a的值被提至double空间进行运算。

以下程序也是不能通过程序编译的:

short a=4;

short b=5;

short c=a+b;  //程序又会告诉你遗失精度

所以你要告诉程序,你就要int的运算结果丢到short,请他住嘴:

short a=4;

short b=5;

short c=short(a+b);  //编译通过

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值