java中可能损失精度是什么意思

publicclassVariable{publicstaticvoidmain(String[]args){floatf=10.0f;doubled=100.0d;f=... public class Variable {
public static void main(String[] args) {
float f=10.0f;
double d=100.0d;
f=d;
System.out.println("f="+f);
}
}
运行以后说是可能损失精度,是什么意思
展开
 我来答
AdanBaron
2014-10-13 · TA获得超过170个赞
知道答主
回答量:73
采纳率:100%
帮助的人:46.4万
展开全部

public static void main(String[] args) {

   //double类型转为float需要强转

   /**

    *  float的指数位有8位,而double的指数位有11位

    *  float的指数范围为-127~+128,而double的指数范围为-1023~+1024

    *  float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

    *  double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

    */

   float f = 10.0f;  

   double d = 100.0d;  

   f = (float) d;  //double转float,但是这样会造成损失精度

   System.out.println("f=" + f); 

 }

 

anglewang98
推荐于2017-10-04 · TA获得超过535个赞
知道小有建树答主
回答量:420
采纳率:80%
帮助的人:282万
展开全部
float与double的区别

单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。

浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。

指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.
数符加尾数占48位,指数符加指数占16位 -- double.

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。

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

所以你把double赋值给float变量的过程,实际上是一个强制转换,肯定会损失精度。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-10-13 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1061万
展开全部
double的存储范围比float大,f=d;如果d超过float存储范围,强制转换成float会损失精度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小傻

2018-07-30 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部
java中整数相乘或者相加,如果超出范围了,都会损失精度。
十进制数的二进制表示可能不够精确浮点数或是双精度浮点数无法精确表示的情况并不少见。浮点数值没办法用十进制来精确表示的原因要归咎于CPU表示浮点数的方法。这样的话您就可能会牺牲一些精度,有些浮点数运算也会引入误差。以上面提到的情况为例,8.1的二进制表示并非就是精确的8.1。反而最为接近的二进制表示是 0.8099999999999999。原因在于浮点数由两部分组成:指数和尾数。浮点数的值实际上是由一个特定的数学公式计算得到的。您所遇到的精度损失会在任何操作系统和编程环境中遇到。 注意: 您可以使用Binary Coded Decimal (BCD)库来保持精度。BCD数字编码方法会把每一个十进制数字位单独编码。 类型失配 您可能混合了浮点数和双精度浮点数类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
习惯自己丶
2014-10-13 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:53.2万
展开全部
一个十进制小数,哪怕是很简单的小数,如0.1,当你用二进制
来表示时,它却是个无限环小数。
十进制(0.1)=二进制(0.0001100110011....)
计算机是用二进制表示数的,存储的位长有限,只能截掉,
所以误差就产生了。

所以在一些要求四舍五入严格精度的场合,最好把浮点数转换为
整数来计算,否则可能在某些特殊的情况下产生意外的计算错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式