大家好,又见面了,我是你们的朋友全栈君。
-
(double) + Math.round
返回double
类型// 案例:四舍五入保留小数点后1位 double d1 = 123.456; double d2 = 654.321; double v1 = (double) Math.round(d1 * 10) / 10; double v2 = (double) Math.round(d2 * 10) / 10; System.out.println(v1); // 123.5 System.out.println(v2); // 654.3
-
DecimalFormat
返回String
类型,你可以设置四舍五入的模式,详见java.math.RoundingMode
,提示:负数四舍五入时有不同的模式double d1 = 123.456; double d2 = 654.321; DecimalFormat decimalFormat = new DecimalFormat("#.#"); decimalFormat.setRoundingMode(RoundingMode.UP); String format1 = decimalFormat.format(d1); System.out.println(format1); String format2 = decimalFormat.format(d2); System.out.println(format2);
-
BigDecimal
返回double
类型,可以设置四舍五入的模式,提示:负数四舍五入时有不同的模式。注意:BigDecimal#setScale
方法返回一个新的BigDecimal
对象!BigDecimal bigDecimal1 = new BigDecimal(d1); BigDecimal bigDecimal2 = new BigDecimal(d2); BigDecimal vbd1 = bigDecimal1.setScale(1, BigDecimal.ROUND_HALF_UP); BigDecimal vbd2 = bigDecimal2.setScale(1, BigDecimal.ROUND_HALF_UP); System.out.println(vbd1.doubleValue()); System.out.println(vbd2.doubleValue());
Java支持七种舍入方式:
- ROUND_UP:远离零方向舍入。向远离0的方向舍入,也就是说,向绝对值最大的方向舍入,只要舍弃位非0即进位。
- ROUND_DOWN:趋向零方向舍入。向0方向靠拢,也就是说,向绝对值最小的方向输入,注意:所有的位都舍弃,不存在进位情况。
- ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢,如果是正数,舍入行为类似于ROUND_UP;如果为负数,则舍入行为类似于ROUND_DOWN。注意:Math.round方法使用的即为此模式。
- ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢,如果是正数,则舍入行为类似于 ROUND_DOWN;如果是负数,则舍入行为类似于ROUND_UP。
- HALF_UP:最近数字舍入(5进)。这就是我们最最经典的四舍五入模式。
- HALF_DOWN:最近数字舍入(5舍)。在四舍五入中,5是进位的,而在HALF_DOWN中却是舍弃不进位。
- HALF_EVEN:银行家算法。
在普通的项目中舍入模式不会有太多影响,可以直接使用Math.round方法,但在大量与货币数字交互的项目中,一定要选择好近似的计算模式,尽量减少因算法不同而造成的损失。
银行家算法:
四舍:舍弃的数值:0.000、0.001、0.002、0.003、0.004,因为是舍弃的,对银行家来说,就不用付款给储户了,那每舍弃一个数字就会赚取相应的金额:0.000、0.001、0.002、0.003、0.004。
五入:进位的数值:0.005、0.006、0.007、0.008、0.009,因为是进位,对银行家来说,每进一位就会多付款给储户,也就是亏损了,那亏损部分就是其对应的10进制补数:0.005、0.004、0.003、0.002、0.001。
因为舍弃和进位的数字是在0到9之间均匀分布的,所以对于银行家来说,每10笔存款的利息因采用四舍五入而获得的盈利是:
银行家舍入(Banker’s Round)的近似算法,其规则如下:
- 舍去位的数值小于5时,直接舍去;
- 舍去位的数值大于等于6时,进位后舍去;
- 当舍去位的数值等于5时,分两种情况:5后面还有其他数字(非0),则进位后舍去;若5后面是0(即5是最后一个数字),则根据5前一位数的奇偶性来判断是否需要进位,奇数进位,偶数舍去。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143350.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...