如何实现上舍入到0.05

本文介绍了两种将数值向上舍入到最接近0.05倍数的方法。一种利用Math.ceil函数结合简单的数学运算实现,另一种通过BigDecimal类进行复杂但精确的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题是上次去一家公司去面试的时候,把我给难住了的地方。

只能怪自己没有好好的学习ceil和floor的用法;

其实google了以下只需要简单的方法一句话就可以了;

如下:

	private static void roundUpToZeroPZeroFive2(double input) {
		double output = 0;
		System.out.println("before round :" + input);
		
		output = Math.ceil(input*20)/20;
		System.out.println("after round :" + output);
	}


还有一种笨方法:

    public static BigDecimal roundTax(BigDecimal bd){  
        if(bd == null || BigDecimal.ZERO.compareTo(bd) == 1){  
            return BigDecimal.ZERO.setScale(2);  
        }  
        bd = bd.setScale(2,RoundingMode.HALF_UP);  
        String strBd = bd.toString();  
        String strLastBit = strBd.substring(strBd.length()-1,strBd.length());  
        BigDecimal bdTemp = BigDecimal.ZERO;  
        bdTemp.setScale(2);  
        int iLastBit = Integer.valueOf(strLastBit);  
        if(iLastBit%5 != 0){  
            bdTemp = BigDecimal.valueOf(iLastBit).divide(BigDecimal.valueOf(100));  
            bdTemp = bdTemp.multiply(BigDecimal.valueOf(-1));  
            bdTemp = bdTemp.add(iLastBit>5 ? new BigDecimal("0.1") : new BigDecimal("0.05"));  
        }  
        bd = bd.add(bdTemp);  
        return bd;  
    } 

参见这里:

http://blog.youkuaiyun.com/daxiang12092205/article/details/37989071


http://stackoverflow.com/questions/6330852/round-off-decimal-value-up-to-nearest-0-05-value

面试题目可以看这里:

http://blog.youkuaiyun.com/daxiang12092205/article/details/37938915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值