java float乘法不正确的解决办法
来源:互联网 发布:nginx配置stream 编辑:程序博客网 时间:2024/05/22 13:39
我不知道大家开发中有没有试验过 定义一个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.floorMath.roundMath.ceil1.41121.51221.6122-1.4-2-1-1-1.5-2-1-1-1.6-2-2-1如果大家还有其他问题,欢迎加入我的qq群:
开发一群:415275066 开发二群:537532956
阅读全文
0 0
- java float乘法不正确的解决办法
- java float 和 double 的 bug 和解决办法BigDecimal
- float属性导致父容器背景的显示不正确
- UDP发送Select不正确返回的解决办法
- “由于应用程序配置不正确"的解决办法
- "由于应用程序配置不正确"的解决办法
- echop 验证码不正确的解决办法
- java replaceAll 不正确的解决方法
- JavaScript中float的减法与乘法计算错误问题
- float高度不一致 导致错位的解决办法
- css 浮动float 的一些解决办法
- mysql float出现超长小数的解决办法
- float和double 的精度缺失问题以及在Java中的解决办法
- IE9下JS的getYear()获取不正确的解决办法
- IIS 试图加载格式不正确的程序的解决办法2
- [随记]JDK 5 运行时区不正确的解决办法
- Discuz! 6.1.0提示来路信息不正确问题的解决办法
- 关于烧写vivi后flash分区不正确的解决办法
- android自定义View,区域热力地图(具备每个省份的点击接口)
- java家狗师必备技能
- 【python】算术、比较、逻辑操作符及他们的优先级
- hdu1730
- 指针和引用的区别
- java float乘法不正确的解决办法
- 表达式计算
- http请求的referer属性
- 【成长经历】----陪女朋友拔智齿
- HDU-2546(01背包)
- AtCoder Grand Contest 018 --------- Getting Difference
- Scala 类
- Html5新增常见标签
- 将"eh"更正为"Excel Home"