java float在用float算法中输出的数不对,应该是13却得出了1.3000002。求解决方法

java float里2个float相乘会出现精度不对 [问题点數:0分]

确认一键查看最优答案

本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!

有人有解决这个问题的办法吗

你先定义一个double变量

这个跟jvm有關系了或者说是jvm的限制。但是不是不可能实现的不过自己要写很多控制的程序段。除非你用于科学计算不然我觉得划不着。

在java float中提供一个修饰符strictfp可以把计算精度保留到更高的程度

如果你实在需要请你自己参阅<java float语言规范》

如果结果还要存在float里面的话,你无法保证它不會溢出

如果一定要这么做也行

如果你能够保证不会溢出,这样做便不会影响结果的精度


这个跟jvm有关系了或者说是jvm的限制。但是不是不鈳能实现的不过自己要写很多控制的程序段。除非你用于科学计算不然我觉得划不着。

在java float中提供一个修饰符strictfp可以把计算精度保留到更高的程度

如果你实在需要请你自己参阅<java float语言规范》

提一下:我所说的只是在你能保证a*b不会超出float数值定义范围,否则它会自动截掉高位這样就会丢失数据

如果那样的话,c必须定义为double类型


具体一点的说请参阅《java float语言规范》8.1.1.3

你把它double型的计算,然后在根据要求用

匿名用户不能发表回复!
}

相除的结果系统认定是双精度的而且是按照计算机的二进制。所以会出现你这样的结果

主要是因为java float中的【简单类型】并不适用于对【浮点】的【 精确计算】。,其它语訁也存在同样的问题

计算机存储数值,是二进制的 在处理的时候,也是先把【浮点数】(float , double)转成整数再转成二进制然后进行操作,洳果有取余会有不同的取余方式。再加上运算完成后再多二进制转成上层的浮点,又会有一些取舍就造成了呈现出来时的简单明显嘚错误 。

你可以试试下面的代码:

 

可以把两个数同时扩大N倍从而去掉小数在相除。如

两个浮点型的数据相运算结果肯定还是浮点型,想要得到整形就必须强制转化(int)c/d就ok了

转为int型啊其中只要一个是float型的结果都会是float,所以你要转换

}

我要回帖

更多关于 java float 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信