double类型数字如何保留两位小数?

原文地址: Round a double to 2 decimal places


网友 Luca Vix

function Double round2(Double val) {
    return new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue();
}

注意toString()方法!!!!
这是因为BigDecimal需要将double转换成精确的二进制数!!!
下面是一些答案以及他们的失败案例:

// 没有bug!
new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue() 

Double val = 260.775d; 
new BigDecimal(val).setScale(2,RoundingMode.HALF_UP).doubleValue()
期待值 260.78  实际值 260.77

Double val = 260.775d; 
Math.round(val * 100.d) / 100.0d 
期待值 260.78  实际值 260.77

Double val = 256.025d; 
new DecimalFormat("0.00").format(val) 
期待值 256.03  实际值 256.02 

Double val = 256.025d;
(int)(val * 100 + 0.5) / 100.0;
期待值 256.03  实际值 256.02 

网友 Pritesh Mhatre

请使用 Apache commons math:

Precision.round(10.4567, 2)

该方法的实质还是用的上述网友的方法


commons-math的maven坐标

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.2</version>
</dependency>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程小平】【日期:2018.04.11】第51天 【一个目标】我三个月短期的目标是:我祈愿所有孩子有激情有梦想,积...
    lindacheng2017阅读 1,053评论 0 0
  • 本文示例代码查看 0.0 FMDB 结构图 1.FMDB 使用方法 1.1 类 1.1.1 三个基本类 FMDat...
    Iris_Fighting阅读 1,813评论 0 0
  • 《庄子·达生》:“夫醉者之坠车,虽疾不死。骨节与人同,而犯害与人异,其神全也。乘亦不知也,坠亦不知也,死生惊惧不入...
    江省吾阅读 2,649评论 0 0
  • 关键词:所有权依恋症、名片简历、技能简历、职场清零术 其实很多人早就破产了,只是活在还没有破产的组织里。如果你把自...
    去留无迹阅读 2,939评论 0 2
  • 最近读了一些大咖的观点,发现了一个事实,很多牛人之所以是牛人是因为这些牛人可以控制自己的本能,去做一些反人性的事。...
    王秦颖阅读 4,095评论 7 9