java float乘法不正确的解决办法
2023-03-07 09:07:56 时间
我不知道大家开发中有没有试验过 定义一个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 |
相关文章
- 焊接机器人的组成有哪些部件
- 01-沟通之道《人性的弱点》
- Abelian上市前夜,创始人Duncan博士详解项目愿景、技术、产品和生态
- WebStorm2023-安装教程
- CorelDRAW2023个人版电脑图像设计矢量工具
- 相比盈利,蔚来或许更在乎时间
- 向量的增减合并元素
- package not available
- 一文搞懂基于 Kubescape 进行 Kubernetes 安全加固
- PHP - 代码规范PSR
- 重复数字全排列的全新去重思想(非循环)C语言
- Linux音频采集和在国产化平台中遇到的坑(二)
- 蓝桥杯大赛软件类省赛C/C++大学A组-求和
- 概率论 1.1
- 3-R包
- 蓝桥杯大赛软件类省赛C/C++大学B组-修剪灌木
- Fastdata极数:2022年中国数字音乐行业洞察报告
- R语言谱聚类社会化推荐挖掘协同过滤电影社交网站Flixster数据集应用研究
- R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标|附代码数据
- 使用腾讯云服务器快速搭建网站教程