A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

礼礼小跑

  • 黑马币:43

  • 帖子:20

  • 精华:0

float b=3.14就行了
回复 使用道具 举报
应该是写法错误了,应该写成:float b = 3.14f , float数据类后面要加后缀“f”,long 数据类型后面也要加后缀"l",希望帮到楼主。
回复 使用道具 举报
我觉得JAVA是对小数点后面的精度判断比较困难
回复 使用道具 举报
xiaoyi 发表于 2015-1-27 22:01
那么楼主说3.14也在float范围内

楼上说的是对的,3.14确实不在float的范围内,并且也不在double的范围内,float和double都无法表示出准确的3.14,3.14在计算机中是一个无限长度的的二进制。
这有关浮点数在计算机中的的表示方式(原理我无法表达清楚,只能大概说明一个结果,具体大家可以查一查其他资料):
举例子说 0.3 这个数会把double的64位全部占用,如果给予更多的位数一千位数一万位也表示不出来,同理3.14一样,在计算机中小数的表示基本上无法准确的描述出来,一般是只是一个近似值(除了0.5这些比较特殊的例子外),这也是为什么浮点数的比较我们无法使用 == 来进行,而是使用两数之差在一个很小的范围内说明两数字相等。

所以float = 3.14,把一个64位的数转换成32位的数字会损失后面的精度,转换之后两数字就已经不再相等,
double a = 3.14; float b = (float)a; double c = double(b);  if(a == c) //返回的是false可以进行验证。

但是short a = 1;这个确实可以无损的将int型号转换成short类型。
回复 使用道具 举报
3.14f就行了吧?
回复 使用道具 举报
浮点型的高位向低位转换会涉及到精度损失,而int型不存在精度的问题
回复 使用道具 举报
float f=3.14f?
回复 使用道具 举报
Ing 中级黑马 2016-3-9 23:47:58
28#
后面加表F;
回复 使用道具 举报
强制转换一下
回复 使用道具 举报
学习学习
回复 使用道具 举报
那么问题来了,为什么int a=1;int b=2; short c=a+b;会报错,显示损失精度;按照道理说(a
回复 使用道具 举报
按照道理说(a+b)应该转化为int型的3,应该可以啊
回复 使用道具 举报
邓士林 发表于 2015-1-27 22:25
先说废话:Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte ...

那么问题来了,为什么int a=1;int b=2; short c=a+b;会报错,显示损失精度;按照道理说(a+b)应该转化为int型的3,应该可以啊;回复了,请转发到我邮箱1904505316@qq.com 受教了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马