博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java Math.round()比较特殊的四舍五入
阅读量:4117 次
发布时间:2019-05-25

本文共 1356 字,大约阅读时间需要 4 分钟。

 
public class MathTest { 
 
 
 
public static void main(String[] args) { 
 
 
 
 
 
 
 
System.out.println("小数点后第一位=5"); 
 
 
 
 
 
 
 
System.out.println("正数:Math.round(11.5)=" + Math.round(11.5)); 
 
 
 
 
 
 
 
System.out.println("负数:Math.round(-11.5)=" + Math.round(-11.5)); 
 
 
 
 
 
 
 
System.out.println(); 
 
 
 
 
 
 
 
 
 
System.out.println("小数点后第一位<5"); 
 
 
 
 
 
 
 
System.out.println("正数:Math.round(11.46)=" + Math.round(11.46)); 
 
 
 
 
 
 
 
System.out.println("负数:Math.round(-11.46)=" + Math.round(-11.46)); 
 
 
 
 
 
 
 
System.out.println(); 
 
 
 
 
 
 
 
 
 
System.out.println("小数点后第一位>5"); 
 
 
 
 
 
 
 
System.out.println("正数:Math.round(11.68)=" + Math.round(11.68)); 
 
 
 
 
 
 
 
System.out.println("负数:Math.round(-11.68)=" + Math.round(-11.68)); 
 
 
 
 
 
运行结果:
1、小数点后第一位=5
2、正数:Math.round(11.5)=12
3、负数:Math.round(-11.5)=-11
4、
5、小数点后第一位<5
6、正数:Math.round(11.46)=11
7、负数:Math.round(-11.46)=-11
8、
9、小数点后第一位>5
10、正数:Math.round(11.68)=12
11、负数:Math.round(-11.68)=-12
根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:
1、参数的小数点后第一位<5,运算结果为参数整数部分。
2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。

 

终结:大于五全部加,等于五正数加,小于五全不加。

 

还有一个问题就是奇进偶舍的原则

今天客户跑过来跟我说,我们程序里面计算的价格不对,我检查了一下,发现价格是经过折算后的价格,结果是可能小数位较多,而单据上只能打印两位价格,所以就对价格调用Math.Round(price,2)函数进行四舍五入。

而出现问题的单价就是1.805,函数Math.Round(1.805,2)的返回值却是1.80,按照四舍五入的原则,结果应该是1.81才对。
在一番google之后,发现微软是对了,是我们错了。:(
原来四舍五入也有个国际惯例,叫奇进偶舍,意思是当舍入位前面一位是奇数时,就进,为偶数时,就舍,这也是体现公平性的原理。
可是国际惯例往往在国内很多企业行不通,为了应付他们的要求,采用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。

转载地址:http://isupi.baihongyu.com/

你可能感兴趣的文章
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>