为了账号安全,请及时绑定邮箱和手机立即绑定

整数按位整除并保留小数点后固定位数

标签:
Android

先看看需求环境:比较大的数字按位整除,比如按千位或万位整除,并保留小数点后多少多少位,比如一位,两位这样。

这样的变态需求基本上属于高精度计算了,我们常用的主类型加上运算符不太好算,那么我们可以考虑使用一些特殊的类型,比如封装器

涉及计算的封装器可参考BigInteger 、BigDecimal ,一个是支持整数,一个支持定点数字

要留下小数点,那就没法用Integer了。



我们的核心逻辑就是构造BigDecimal,用setScale方法来计算并向最接近的数字舍入


先记住三个参数及Java中BigDecimal的8种舍入模式

Java中BigDecimal的8种舍入模式参看这里http://www.bdqn.cn/news/201311/11834.shtml


我们使用ROUND_HALF_EVEN来取最接近的结果,这个参数见仁见智,看哪个更接近自己想要的结果

被除数num     

除数max          进位数,如千进位或万进位

保留位数scale    如保留小数后1位


根据我们的需求整理一下实现:

[代码]java代码:

?

double tempResult = (double)num/max;//当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,因此使用double 精确转换

 

BigDecimal  bigdecimal  = new BigDecimal(Double.toString(tempResult ));//精确计算,用String来够造BigDecimal

 

Double resultScaled= bigdecimal .setScale(scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();

 

 

String result;

 

if(resultScaled- Double.valueOf(resultScaled).intValue()== 0){//保留的小数为0则直接舍弃

result = String.valueOf(resultScaled.intValue());

}else{

result = resultScaled.toString();

}

return result;

<br>

 

原文链接:http://www.apkbus.com/blog-35555-60422.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消