java float乘法不正确的解决办法

简介: java float乘法不正确的解决办法

我不知道大家开发中有没有试验过 定义一个float变量然后 做乘法,举个列子

float count = 6;
String num  = (count*0.7)+"";
System.out.println(num);

这个打印出来的结果是4.199999999999999  而不是4.2


《Effective Java》中已经讲出了这种问题,float/double不能停供完全精确的计算结果。这个原理其实很简单,float/int都是32bit(也就是一共有2^32个精确值),而int的范围是-2^31 ~ 2^31-1,而Float的最大值是3.4028235e+38,远大于2^31 - 1。而且,int只负责个数有限的整数,而浮点却要用来表示个数无穷的小数,显然力不从心。浮点精确值可以简单视作一个以0为中心的正态分布,绝对值越小(越接近0的地方),相邻两个精确值月密集。比如,最近的两个值可能只相差0.00000...几十个0...01,而最远的两个精确值,却差了2.028241E31

float shoultScore = 6;
String actScore;
float num = (float) (Math.round(shoultScore * 0.7 * 1000)) / 1000;
actScore = num + "";
System.out.println(actScore);

这次打印出来的结果就是正常的了,调用了一下Math.round这个函数。


具体这个math round  ,ceil ,floor这些 函数分别代表:


floor 返回不大于他的最大整数

round 则是4舍5入的计算,入的时候是到大于它的整数

round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

ceil 则是不小于他的最小整数


如下:


Math.floor Math.round Math.ceil

1.4 1 1 2

1.5 1 2 2

1.6 1 2 2

-1.4 -2 -1 -1

-1.5 -2 -1 -1

-1.6 -2 -2 -1


相关文章
|
7月前
|
存储 Java
创建一个乘法练习题生成器 using Java
创建一个乘法练习题生成器 using Java
|
8月前
|
存储 Java
百度搜索:蓝易云【Java语言之float、double内存存储方式】
由于使用IEEE 754标准进行存储,float和double类型可以表示非常大或非常小的浮点数,并且具有一定的精度。然而,由于浮点数的特性,它们在进行精确计算时可能会存在舍入误差。在编写Java程序时,需要注意使
104 0
|
5月前
|
网络协议 Java 编译器
Java常见异常及对应解决办法
Java常见异常及对应解决办法
68 10
|
6月前
|
Java
关于idea报错:Cannot determine path to 'tools.jar' library for 17 (E:\java-jdk\jdk17)的解决办法
关于idea报错:Cannot determine path to 'tools.jar' library for 17 (E:\java-jdk\jdk17)的解决办法
|
8月前
|
Java
IDEA Error:java: Compilation failed: internal java compiler error 解决办法
IDEA Error:java: Compilation failed: internal java compiler error 解决办法
220 0
|
8月前
|
Java Spring
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
443 0
|
8月前
|
缓存 Java 开发工具
Error:java: Compilation failed: internal java compiler error 解决办法
Error:java: Compilation failed: internal java compiler error 解决办法
104 0
|
8月前
|
Java 定位技术
在Java中为什么不推荐使用Float
在Java中为什么不推荐使用Float
100 1
|
8月前
|
存储 安全 前端开发
Java中的String类与StringBuilder、StringBuffer的比较:缺点与解决办法
Java中的String类与StringBuilder、StringBuffer的比较:缺点与解决办法
97 0
|
8月前
|
缓存 架构师 算法
Java内存溢出如何解决,Java oom排查方法,解决办法
在Java开发过程中,有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError(OOM)。
102 0